new RxVolley.Builder()
.url(“http://www.kymjs.com/rss.xml”) //接口地址
//请求类型,如果不加,默认为 GET 可选项:
//POST/PUT/DELETE/HEAD/OPTIONS/TRACE/PATCH
.httpMethod(RxVolley.Method.GET)
//设置缓存时间: 默认是 get 请求 5 分钟, post 请求不缓存
.cacheTime(6)
//内容参数传递形式,如果不加,默认为 FORM 表单提交,可选项 JSON 内容
.contentType(RxVolley.ContentType.FORM)
.params(params) //上文创建的HttpParams请求参数集
//是否缓存,默认是 get 请求 5 缓存分钟, post 请求不缓存
.shouldCache(true)
.progressListener(listener) //上传进度
.callback(callback) //响应回调
.encoding(“UTF-8”) //编码格式,默认为utf-8
.doTask(); //执行请求操作
对 RxJava 的支持
RxVolley
支持返回一个 Observable<Result>
类型的数据,如下是 Result
类的原型
public class Result {
public String url;
public byte[] data;
public VolleyError error;
public Map<String, String> headers;
public int errorCode;
}
执行一次请求,并返回 Observable
Observable observable = new RxVolley.Builder()
.url(“http://www.kymjs.com/rss.xml”)
//default GET or POST/PUT/DELETE/HEAD/OPTIONS/TRACE/PATCH
.httpMethod(RxVolley.Method.POST)
.cacheTime(6) //default: get 5min, post 0min
.params(params)
.contentType(RxVolley.ContentType.JSON)
.getResult(); // 使用getResult()来返回RxJava数据类型
//当拿到 observable 对象后,你可以设置你自己的 subscriber
observable.subscribe(subscriber);
完整的使用示例
public class MainActivity extends AppCompatActivity {
private Subscription subscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable observable = new RxVolley.Builder()
.url(“http://kymjs.com/feed.xml”)
.contentType(RxVolley.ContentType.FORM)
.getResult();
subscription = observable
.map(new Func1<Result, String>() {
@Override
public String call(Result result) {
return new String(result.data);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber() {
@Override
public void onCompleted() {
Log.i(“kymjs”, “======网络请求结束”);
}
@Override
public void onError(Throwable e) {
Log.i(“kymjs”, “======网络请求失败” + e.getMessage());
}
@Override
public void onNext(String s) {
Log.i(“kymjs”, “======网络请求” + s);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (subscription != null && subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
}
}
自定义请求
也许你是 Volley 的重度使用者(就像我),那么你一定是因为 Volley 自由的扩展性而爱上它的。
你可以通过创建一个Request<?>
的子类,自由配置请求策略,缓存策略,数据传输加密,重试策略等。
最后通过
RxVolley.Builder().setRequest(yourRequest).doTask();
去执行你的自定义 Request
一个典型自定义Request的示例:
/**
- Form表单形式的Http请求
*/
public class FormRequest extends Request<byte[]> {
private final HttpParams mParams;
public FormRequest(RequestConfig config, HttpParams params, HttpCallback callback) {
super(config, callback);
if (params == null) {
params = new HttpParams();
}
this.mParams = params;
}
@Override
public String getCacheKey() {
if (getMethod() == RxVolley.Method.POST) {
return getUrl() + mParams.getUrlParams();
} else {
return getUrl();
}
}
@Override
public String getBodyContentType() {
if (mParams.getContentType() != null) {
return mParams.getContentType();
} else {
return super.getBodyContentType();
}
}
@Override
public ArrayList getHeaders() {
return mParams.getHeaders();
}
@Override
public byte[] getBody() {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
mParams.writeTo(bos);
} catch (IOException e) {
Loger.debug(“FormRequest#getBody()—>IOException writing to ByteArrayOutputStream”);
}
return bos.toByteArray();
}
@Override
public Response<byte[]> parseNetworkResponse(NetworkResponse response) {
return Response.success(response.data, response.headers,
HttpHeaderParser.parseCacheHeaders(getUseServerControl(), getCacheTime(),
response));
}
@Override
protected void deliverResponse(ArrayList headers, final byte[] response) {
if (mCallback != null) {
HashMap<String, String> map = new HashMap<>(headers.size());
for (HttpParamsEntry entry : headers) {
map.put(entry.k, entry.v);
}
mCallback.onSuccess(map, response);
}
}
@Override
public Priority getPriority() {
return Priority.IMMEDIATE;
}
}
文件(图片)下载
利用 RxVolley 的自定义请求,在库中内置了文件下载功能。你可以使用
//下载进度(可选参数,不需要可不传)
listener = new ProgressListener() {
@Override
public void onProgress(long transferredBytes, long totalSize) {
Loger.debug(transferredBytes + “======” + totalSize);
}
}
//下载回调,内置了很多方法,详细请查看源码
//包括在异步响应的onSuccessInAsync():注不能做UI操作
//下载成功时的回调onSuccess()
//下载失败时的回调onFailure():例如无网络,服务器异常等
HttpCallback callback = new HttpCallback(){
@Override
public void onSuccessInAsync(byte[] t) {
}
@Override
public void onSuccess(String t) {
}
@Override
public void onFailure(int errorNo, String strMsg) {
}
}
RxVolley.download(FileUtils.getSDCardPath() + “/a.apk”,
“https://www.oschina.net/uploads/osc-android-app-2.4.apk”,
listener, callback);
download()原型
既然说了下载功能
是利用 RxVolley 的自定义请求创建的,不妨看看他的方法实现:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
总结
首先是感觉自己的基础还是不够吧,大厂好像都喜欢问这些底层原理。
另外一部分原因在于资料也还没有看完,一面时凭借那份资料考前突击恶补个几天居然也能轻松应对(在这里还是要感谢那份资料,真的牛),于是自我感觉良好,资料就没有怎么深究下去了。
之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。
下一步还是要查漏补缺,进行针对性复习。
最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!在这里也免费分享给大家,希望大家不要犯和我一样的错误呀!!!一定要看完!
获取方式:点击我的GitHub
总结
首先是感觉自己的基础还是不够吧,大厂好像都喜欢问这些底层原理。
另外一部分原因在于资料也还没有看完,一面时凭借那份资料考前突击恶补个几天居然也能轻松应对(在这里还是要感谢那份资料,真的牛),于是自我感觉良好,资料就没有怎么深究下去了。
之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。
下一步还是要查漏补缺,进行针对性复习。
最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!在这里也免费分享给大家,希望大家不要犯和我一样的错误呀!!!一定要看完!
[外链图片转存中…(img-2I24LvSc-1711069125585)]
[外链图片转存中…(img-tV9ydBxI-1711069125586)]
[外链图片转存中…(img-MgeKX2M2-1711069125586)]
获取方式:点击我的GitHub