RxJava变换flatMap的使用 解析直接集合Json
来源:互联网 发布:河北盘古网络怎么样 编辑:程序博客网 时间:2024/06/12 02:10
首先导入以下依赖
compile 'com.squareup.retrofit2:retrofit:2.0.1' compile 'com.squareup.retrofit2:converter-gson:2.0.1' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
封装baseurl
如 必须以/结尾
public static final String BASE_PATH = "http://service.meiyinkeqiu.com/service/"; public static final String BASE_URL = "https://api.github.com/";
创建接口
public interface ApiService { /** * 结合Retrofit+RxJava * thtp://service.meiyinkeqiu.com/service/ads/cptj * @param * @return */ @GET("ads/cptj") Observable<News> getNoParams(); /** * 结合RxJava * @param user * @return * https://api.github.com/users/forever */ @GET("users/{user}") Observable<User> getHasParams(@Path("user")String user); //第三个接口,,兼容json解析功能,,集成rxjava square retrofit //https://api.github.com/repos/square/retrofit/contributors @GET("repos/{square}/{retrofit}/contributors") Observable<List<Data>> getHasParams2(@Path("square")String square, @Path("retrofit")String retrofit);}
Activity里的代码
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // getNoParams(); // getHasParams(); getHasParams2(); } private void getHasParams2() { Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_URL).addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//支持RxJava .build(); ApiService apiService = retrofit.create(ApiService.class); //得到Observable Observable<List<Data>> observable = apiService.getHasParams2("square", "retrofit"); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .flatMap(new Func1<List<Data>, Observable<Data>>() { @Override public Observable<Data> call(List<Data> datas) {//一对多的关系 return Observable.from(datas);//循环取Data 代替了迷之缩进的方式获取 } }).subscribe(new Subscriber<Data>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Data data) {//根据被观察生产多少个事件就消费多少个 String avatar_url = data.getAvatar_url(); Log.i("xxx", avatar_url); } }); } private void getHasParams() { Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_URL).addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//支持RxJava .build(); ApiService apiService = retrofit.create(ApiService.class); //得到Observable Observable<User> observable = apiService.getHasParams("forever"); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(new Func1<User, User>() {//直接变换 一对一的关系 @Override public User call(User user) { return user; } }).subscribe(new Subscriber<User>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(User user) { String avatar_url = user.getAvatar_url(); Log.i("xxx", avatar_url); } }); } private void getNoParams() { Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_PATH).addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//支持RxJava .build(); ApiService apiService = retrofit.create(ApiService.class); //得到Observable Observable<News> observable = apiService.getNoParams();//生产事件 //被观察者订阅观察 默认在同一个线程 observable.subscribeOn(Schedulers.io())//指定IO做耗时操作 .observeOn(AndroidSchedulers.mainThread())//指定更新UI在主线程 .subscribe(new Observer<News>() { @Override public void onCompleted() {//完成 } @Override public void onError(Throwable e) {//失败 Log.i("xxx", e.getMessage()); } @Override public void onNext(News news) {//消费事件 List<News.AdsBean> ads = news.getAds(); for (int i = 0; i < ads.size(); i++) { News.AdsBean adsBean = ads.get(i); String gonggaoren = adsBean.getGonggaoren(); Log.i("xxx", gonggaoren); } } }); }}
/** * 有参get请求 * 拼接参数 /形式 * * @return https://api.github.com/users/baiiu */ @GET("users/{user}") Call<User> getHasParams(@Path("user") String user); /** * http://www.93.gov.cn/93app/data.do * channelId * startNum * 拼接 ? & * 为主 */ @GET("data.do") Call<Party> getHasParams2(@Query("channelId")int channelId, @Query("startNum") int startNum ); /** * post请求 http://120.27.23.105/user/reg 注册 */ @POST("reg") @FormUrlEncoded//支持表单提交 Call<User> register(@Field("mobile")String mobile,@Field("password")String password);
;;;
阅读全文
0 0
- RxJava变换flatMap的使用 解析直接集合Json
- RxJava源码解析04-变换过程(flatmap)
- Rxjava(变换类)--FlatMap
- RxJava的flatMap使用记录
- Retrofit结合RxJava1.x使用,RxJava变换flatMap和Map的使用
- RxJava变换操作符:.concatMap( )与.flatMap( )的比较
- RxJava变换操作符:.concatMap( )与.flatMap( )的比较
- RxJava的学习之变换操作符—flatMap
- Rxjava之FlatMap()的运用
- RxJava变换操作符:.concatMap( )与.flatMap( )的比较(即有序对无序)
- RxJava flatmap
- RxJava 系列之变换操作符flatmap(2)
- MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
- MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
- Android打造自己的网络框架----RxJava的基础学习使用2(map、flatMap)
- Android RxJava的使用(三)转换——map、flatMap
- 【Android】RxJava的使用(三)转换——map、flatMap
- 【Android】RxJava的使用(三)转换——map、flatMap
- 扫描二维码
- MyAdapter
- activity的启动模式及应用场景
- MT 256 Advice of Non-Payment of Cheques非支付支票通知
- Coursera吴恩达《优化深度神经网络》课程笔记(1)-- 深度学习的实用层面
- RxJava变换flatMap的使用 解析直接集合Json
- Retrofit+RXjava+多条目+itew的点击事件+软引用+泛型+绑定+解绑
- Linux 图形切换命令行及运行级别
- MT290\291\292\295\296\298\299
- shouji
- 动态代理
- centos6.5安装hadoop集群过程及遇到的问题
- Retrofit 请求
- 不通的路径Ⅱ