RxJava + Retrofit 结合使用
2017-07-26 16:29
274 查看
关于Retrofit使用Json数据的一个坑
一般在根据Json数据设计JavaBean的时候我们Android一般使用的GsonFormat这个插件工具,这个工具很方便,但是也有要注意的地方。今天在调试一个天气接口的时候因为没有复制该复制的内容,导致数据一直无法解析。接下来就贴出具体内容。这是Json数据格式
应该全部复制到GsonFormat,不能把最外层的大括号漏掉。
正确的JavaBean内容
package com.example.rxandroidtest.entity; import java.util.List; /** * Created by D'Russel on 2017/7/26. */ public class Weather { private List<HeWeather5Bean> HeWeather5; public List<HeWeather5Bean> getHeWeather5() { return HeWeather5; } public void setHeWeather5(List<HeWeather5Bean> HeWeather5) { this.HeWeather5 = HeWeather5; } ............. //其他内容就不贴了,篇幅有限 }
错误的JavaBean内容
package com.example.rxandroidtest.entity; /** * Created by D'Russel on 2017/7/26. */ public class HeWeather5 { private BasicBean basic; private NowBean now; private String status; public BasicBean getBasic() { return basic; } public void setBasic(BasicBean basic) { this.basic = basic; } public NowBean getNow() { return now; } public void setNow(NowBean now) { this.now = now; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } ............. //其他内容就不贴了,篇幅有限 }
上面两个对比一下,我们会发现,第二个的JavaBean实际上就是第一个JavaBean的内容,从第一个JavaBean中的
private List<HeWeather5Bean> HeWeather5;
可以看出来,这个可能会有多个HeWeather5值,所以第二种方式导致数据无法解析。
接下来来实现一下RxJava + Retrofit的结合使用
RxJava + Retrofit
build.gradle的内容添加依赖
compile "io.reactivex.rxjava2:rxjava:2.1.1" compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
具体实现
和 Retrofit 的实现步骤差不多,咱们使用的接口是和风天气的接口
咱们先自定义一个网络服务,代码如下:
public interface NetWorkService { //实况天气,传两个参数,一个是城市名,一个是从和风天气申请的key @GET("now") Observable<Weather> getCity(@Query("city") String city, @Query("key") String key); }
初始化网络请求
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://free-api.heweather.com/v5/") //这是和风天气的URL .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build();
获取访问的上海的城市id
NetWorkService netWorkService = retrofit.create(NetWorkService.class); Observable<Weather> observable = netWorkService.getCity("上海",key); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Weather>() { @Override public void accept(@NonNull Weather weather) throws Exception { System.out.println(weather); System.out.println(weather.getHeWeather5().get(0).getBasic().getId()); } });
结果如下:
这里的“”CN101020100“”就是和风天气对于的上海市的id
这样一个采用RxJava的Retrofit网络请求就实现了。
通过这个例子可以看出这种方式是非常的方便的。
相关文章推荐
- RxJava2笔记(3)—RxJava结合Retrofit使用
- 项目重构经验三——Rxjava的使用,RxBus,RxManager,结合retrofit的使用
- RxJava,Retrofit,OkHttp3在项目中结合使用
- MVP+ Retrofit+RxJava+XRecyclerView+TabLayout+Fresco结合使用
- 使用Retrofit结合RxJava实现Get与Post网络请求
- Rxjava和Retrofit结合使用的案例
- MVP+Retrofit+RxJava(Flowable)结合使用
- rxjava 和retrofit 结合使用 请求网络
- Android 优雅的让RxJava2.0+Retrofit2.0结合使用
- RxJava结合Retrofit使用 自定义封装类结合泛型 请求网络数据+Fresco+RecyclerView+MVP分层
- Retrofit 与Rxjava完美结合使用
- Retrofit + RxJava 的结合使用
- Android框架学习之Retrofit(二)RxJava和Retrofit2.0的结合使用
- RxJava和Retrofit结合使用
- RxJava,Retrofit,OkHttp3结合使用
- Retrofit 和 RxJava 结合使用
- Retrofit2.0(二)结合Rxjava2使用
- Retrofit+Rxjava结合使用(三)
- RxJava和Retrofit结合使用
- RXJava+Retrofit的结合使用,来同时请求多个网络接口,我们使用的是merge或mergeArray操作符