1、rxjava、retrifit到底是什么?
最近已经自己根据网上的例子封装完了retrofit+RxJava+OkHttp,但是过了一段时间回顾的时候,自己都忘了他们到底都是干什么的了,只记得三个合起来是一个流行的网络请求框架。正好今天回顾一下。
(1)RXJava
一句话分析就是:是一个简洁的异步框架。异步是RxJava的主要功能。
(2)Retrofit
一句话分析是:是基于对OKHttp封装的一款简洁的网络请求框架,主要功能时网络请求。
写到这里大家肯定就明白了,为啥Retrofit+RxJava是一个完美组合了,以为Android开发时用到异步最多的地方就是网络请求。
2、RxJava的使用
RxJava不光可以用到异步网络请求上,还可以用到其它地方,比如异步加载图片显示,异步执行某个方法等。
Observable.from(folders)
.flatMap((Func1) (folder) -> { Observable.from(file.listFiles()) })
.filter((Func1) (file) -> { file.getName().endsWith(".png") })
.map((Func1) (file) -> { getBitmapFromFile(file) })
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((Action1) (bitmap) -> { imageCollectorView.addImage(bitmap) });
3、Retrofit的使用
给我们示例了如何简单的请求网络以及得到结果对象;
https://www.jianshu.com/p/82f8b58db53c
Retrofit是square开源的网络请求库,底层是使用OKHttp封装的,网络请求速度很快.
主要有一下几种请求方法
格式 | 含义 |
---|---|
@GET | 表示这是一个GET请求 |
@POST | 表示这个一个POST请求 |
@PUT | 表示这是一个PUT请求 |
@DELETE | 表示这是一个DELETE请求 |
@HEAD | 表示这是一个HEAD请求 |
@OPTIONS | 表示这是一个OPTION请求 |
@PATCH | 表示这是一个PAT请求 |
各种请求注解的意思
格式 | 含义 |
---|---|
@Headers | 添加请求头 |
@Path | 替换路径 |
@Query | 替代参数值,通常是结合get请求的 |
@FormUrlEncoded | 用表单数据提交 |
@Field | 替换参数值,是结合post请求的 |
@FormUrlEncoded
@Headers("Content-Type:application/x-www-form-urlencoded; charset=utf-8") //添加
@POST("test/jsonUpload")
Observable<String> uploadUser(@Field("userList") String userList);
当用Field时,则需要添加@FormUrlEncoded
其中为了解决post时的中文乱码问题需要加上请求头
Retrofit的简单使用例子
要使用retrofit请求网络数据,大概可以分为以下几步
- 1)添加依赖,这里以AndroidStudio为例:在build.grale添加如下依赖
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
- 2) 创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
//使用自定义的mGsonConverterFactory
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://apis.baidu.com/txapi/")
.build();
mApi = retrofit.create(APi.class);
- 3)发起网络请求
mApi = retrofit.create(APi.class);
Call<News> news = mApi.getNews("1", "10");
news.enqueue(new Callback<News>() {
@Override
public void onResponse(Call<News> call, Response<News> response) {
}
@Override
public void onFailure(Call<News> call, Throwable t) {
}
});
public interface APi {
@Headers("apikey:81bf9da930c7f9825a3c3383f1d8d766")
@GET("word/word")
Call<News> getNews(@Query("num") String num,@Query("page")String page);
}
到此一个简单的使用retrofit的网络请求就完成了
4、Retrofit+RxJava + OkHttp的封装使用
将这个框架合在一起,说实话确实要比volley用起来要难一些,但是感觉还是挺好用的,可以设置数据缓存,而且我也是完全参考http://blog.csdn.net/wzgiceman/article/details/51939574的,有用到的可以进行参考
5、多文件上传
上面给的封装吧,博主文件上传虽然做了,但是没有多文件上传,我就自己写了一个。
博客地址为:https://blog.csdn.net/f552126367/article/details/80653511