Rxjava+Retrofit简单使用
2024-01-09 12:36:44
Rxjava+Retrofit简单使用
retrofit通过网络线程获得的数据,数据只能在网络线程中使用,无法传递到主线程中。所以可以用rxjava的观察者模式使数据提取在主线程中使用。
1.导入依赖
build.gradle(:app)
文件的dependencies{}中
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
//rxjava
//RxJava的依赖包
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
//RxAndroid的依赖包
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
//rxjava+retrofit
implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0"
- rxjava不仅要导入rxjava本身,还要导入rxjava+retrofit联合的依赖
2.调用使用
-
用
Observable
承接网络类api类:
//GET请求 //公众号 @GET("wxarticle/chapters/json") Observable<Data<List<chapters>>> getChapData(); //POST请求,如果有参数需要添加 @FormUrlEncoded注解,即和@Field配合使用 @FormUrlEncoded @POST("food/getFoods") Observable<Data<List<Food>>> postFood(@Field("categoryId") Integer categoryId);
-
Observable
和Call
起相同作用,起获得反调函数的作用 -
Data以及数据类是根据api网址返回的数据进行定义
-
函数中各参数可以参考retrofit的说明:Retrofit2 实战(一、使用详解篇) - 掘金 (juejin.cn)
-
-
填入前部分的网址
(从此开始在)主函数类:
private Retrofit mRetrofit; mRetrofit= new Retrofit.Builder() .baseUrl("https://wanandroid.com/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) //多添加的部分 .build();
-
获得api数据并处理
Api api = mRetrofit.create(Api.class); //GET请求 api.getTopArticleData() //函数 .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Data<List<ArticleDatas>>>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull Data<List<ArticleDatas>> articleListData) { //将获得的数据赋值到全局变量中,来提取数据 /*填入list为例*/ if (categories == null) return; Log.i("TAG", "body获得"); List<OrderCategories> info = categories.getData(); if (info == null) return; Log.i("TAG", "info获得"); for (OrderCategories oi : info) { titles.add(oi.getName()); Ocategories.add(oi); } } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { //获得数据后的操作,即有执行顺序的操作 } }); //POST请求 Observable<Data<List<OrderCategories>>> obcategories = api.postCategories(categoryType); //定义Observable来调用函数 obcategories.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Data<List<OrderCategories>>>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull Data<List<OrderCategories>> categories) { } @Override public void onError(@NonNull Throwable e) { //报错调试 Log.d(TAG, "onError: 失败"); e.printStackTrace(); } @Override public void onComplete() { } });
文章来源:https://blog.csdn.net/qq_56611561/article/details/135457646
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!