Retrofit+RxJava 的简介和封装

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值