retrofit2、RxJava简单使用总结
  E3iP45Ui0TEu 2023年11月02日 54 0


需要引入的依赖包括:

compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okio:okio:1.6.0'

compile 'io.reactivex:rxandroid:1.1.0'

这里不要遗漏converter-gson,或者可以使用simplexml解析

retrofit2在创建adapter时如需返回Observable需要注册CallAdapterFactory,这里和retrofit有区别,返回Callback不需要注册。

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .client(okHttpClient)
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create())
        .build();

接口定义:

public interface ApiService {
    @GET("Android/{pageSize}/{pageCount}")
    Observable<Response> users(@Path("pageSize")int pageSize, @Path("pageCount") int pageCount);
}

调用:

api = retrofit.create(ApiService.class);

Observable.just(params)
        .flatMap(new Func1<Map<String, Integer>, Observable<Response>>() {
            @Override
            public Observable<Response> call(Map<String, Integer> stringObjectMap) {
                return api.users(stringObjectMap.get("pageSize"),stringObjectMap.get("pageCount"));
            }
        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Action1<Response>() {
            @Override
            public void call(ReceiveData response) {
                usersInfoList = response.results;
                listAdapter.notifyDataSetChanged();
            }
        });


Retrofit2和RxJava配合使用Demo

和Retrofit2单独使用有一些区别

首先,同样写个interface,这里是GitHubService.java,我们这次要实现获取官方提供的测试接口的数据



1 public interface GitHubService {
2     @GET("repos/{owner}/{repo}/contributors")
3     Observable<List<Contributor>> getUserInfoByObservable(@Path("owner") String owner, @Path("repo") String repo);
4 }



注意,上边的区别,retrofit2单独使用的时候是Call<List<Contributor>>,而rx使用的是Observable,可观察者对象

再写一个获取数据的工具类ParseUtils.java



1 public class ParseUtils {
2 
3         public static GitHubService gitHubService = new Retrofit.Builder().baseUrl("https://api.github.com/")
4                 .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
5                 .addConverterFactory(GsonConverterFactory.create()).build().create(GitHubService.class);
6 
7 }



这里也有一些区别,retrofit2单独使用时不需要addCallAdapterFactory(RxJavaCallAdapterFactory.create()),这里使用rx,如果没有这句话,会报Unable to create call adapter for rx.Observable错误

接下来在activity中使用



1 ParseUtils.gitHubService.getUserInfoByObservable("square", "retrofit")
2                 .subscribeOn(Schedulers.newThread())
3                 .observeOn(AndroidSchedulers.mainThread())
4                 .subscribe(new Action1<List<Contributor>>() {
5                     @Override
6                     public void call(List<Contributor> contributors) {
7                         //do somthing
8                     }
9                 });



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  b1UHV4WKBb2S   2023年11月13日   40   0   0 ide抗锯齿
  b1UHV4WKBb2S   2023年11月13日   34   0   0 裁剪ideflutter
  zSWNgACtCQuP   2023年11月13日   32   0   0 ide
E3iP45Ui0TEu