Retrofit和Rxjava的简单使用

Retrofit与RxJava的简单使用

    retrofit是基与okhttp框架进行二次封装后的一个网络请求工具,如果单独作为网络请求来使用,我认为跟xutils、volley、okhttp并无太大的区别,只是volley在请求后的返回参数的方法里,这个方法中可以直接进行UI更新,并不需要handler通知主线程,因为它所在的线程就是主线程,所以对于xutils和okhttp来说,这是它的一个方便之处。而对于retrofit来讲,它的一个优点在于它对请求的封装,对于我们开发来讲,一个项目中大大小小也有几十次http请求,所以有一个良好的封装请求的类对于代码的简洁有了很大的帮助,使用retrofit时要新建一个请求接口,在这个接口里面去填写需要访问的某个地址的参数,话不多说,具体如下,拿豆瓣电影的数据接口为例,首先 是retrofit和RxJava所需要的依赖retrofit为2.0.0,RxJava为1.0.0,单独retrofit不需要RxJava的依赖.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
     compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'io.reactivex:rxjava:1.1.0'
    compile 'io.reactivex:rxandroid:1.1.0'
    compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
   compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
   compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.jakewharton:butterknife:7.0.1'
}

然后就是创建接口数据的实体类,通过豆瓣电影的数据接口:获取实体类
        https://api.douban.com/v2/movie/top250?start=0&count=10
public class MovieDao {
    /**
     * count : 10
     * start : 0
     * total : 250
     * subjects :
     * title : 豆瓣电影Top250
     */
    private int count;
    private int start;
    private int total;
    private String title;
    private List<SubjectsBean> subjects;

    public int getCount() {
        return count;
    }

由于数据太多,这里只贴部分,接下来是定义http请求接口:
public interface APIService {
/**
 * https://api.douban.com/v2/movie/top250?start=0&count=10
 */
    @GET("v2/movie/top250")
    Call<MovieDao> loadMovie(@Query("start") int start,@Query("count") int count);

    @GET("v2/movie/top250")
    Observable<MovieDao> getMovieData(@Query("start") int start, @Query("count") int count);
}

其中@get中的括号里表示请求地址中的域名的后部分,域名在retrofit中写在baseurl中,定义的方法中的@query后面表示填入的参数及参数类型,请求接口写好后,最后在代码中配置请求信息:

@Override
public void onClick(View v) {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();
    APIService apiService = retrofit.create(APIService.class);
    apiService.getMovieData(0,10)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<MovieDao>() {
                @Override
                public void onCompleted() {
                    Toast.makeText(getActivity(),"完成",Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(MovieDao movieDao) {
                    Toast.makeText(getActivity(), movieDao.getTitle(),Toast.LENGTH_SHORT).show();
                }
            });
}

其中addConverterFactory添加对Gson解析的支持,addCallAdapterFactory是添加对RxJava的支持,subscribeOn是将任务执行在io线程中,observeOn即使回到主线程,subscribe回调方法中的OnCompleted即是请求完成,可更新ui
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值