(十)【续】网络框架篇(RxJava+OkHttp+Gson)
来源:互联网 发布:原油api最新数据 编辑:程序博客网 时间:2024/06/13 13:03
在(一)RxJava在Android网络框架中的使用文章中我们已经实现了能成功请求并返回Json的网络框架Demo,能不能再让我们的开发更加高效,实现直接从json2pojo的网络框架。
在Protocol中加入Gson:
可以看我们是通过Protocol模块将OkHttp和RxJava进行关联,那么加入Gson后又会是什么样子?
以下是先前代码片段:
/**
* 创建一个工作在IO线程的被观察者(被订阅者)对象
* @param url
* @param method
* @param params
*/
protected Observable<String> createObservable(final String url, final String method, final TreeMap<String, Object> params) {
return Observable.create(new Observable.OnSubscribe<String>() { // (2)
@Override
public void call(Subscriber<? super String> subscriber) {
Request request = XgoHttpClient.getClient().getRequest(url, method, params); // (3)
String json = XgoHttpClient.getClient().execute2String(request); // (4)
setData(subscriber, json); // (5)
}
}).subscribeOn(Schedulers.io());
}
/**首先从上面代码中我们可以看出,在获取到json后,直接通过setData()方法将Json数据传给了订阅者,而如果要实现json2pojo,首先就要保证回调给订阅者的数据是具体的数据类型而不是json字符串,BaseProtocol中的方式是子类公共的,不可能指定特定的某种具体数据类型,在此不妨使用泛型方法并在参数中传入具体数据类型的字节码对象方便Gson解析:
* 为观察者(订阅者)设置返回数据
* */
protected void setData(Subscriber<? super String> subscriber, String json) {
if (TextUtils.isEmpty(json)) { // (6)
subscriber.onError(new Throwable("not data"));
return;
}
subscriber.onNext(json); // (7)
subscriber.onCompleted();
}
/**
* 创建一个工作在IO线程的被观察者(被订阅者)对象
*
* @param url
* @param method
* @param params
*/
protected <T> Observable<T> createObservable(final String url, final String method, final TreeMap<String, Object> params, final Class<T> clazz) {
return Observable.create(new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> subscriber) {
Request request = XgoHttpClient.getClient().getRequest(url, method, params);
String json = XgoHttpClient.getClient().execute2String(request);
setData(subscriber, json, clazz);
}
}).subscribeOn(Schedulers.io());
}
/**开始测试:
* 为观察者(订阅者)设置返回数据
*/
protected <T> void setData(Subscriber<? super T> subscriber, String json, Class<T> clazz) {
if (TextUtils.isEmpty(json)) {
subscriber.onError(new Throwable("not data"));
subscriber.onCompleted();
return;
}
T data = mGson.fromJson(json, clazz);
subscriber.onNext(data);
subscriber.onCompleted();
}
/**
* Get请求
*/
public Observable<GetModel> text_Get() {
String path = "1";
return createObservable(BASE_URL + path, XgoHttpClient.METHOD_GET, null, GetModel.class);
}
mTestProtocol.text_Get()
.compose(this.<GetModel>bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<GetModel>() {
@Override
public void call(GetModel data) {
tv_reuslt.setText("Get Result:\r\n" + data);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
tv_reuslt.setText("Get Error:\r\n" + throwable.getMessage());
}
});
效果如下:
(本次修改为了读者阅读方便,单独在protocol2包中修改,不影响原Demo)
源码: https://github.com/cn-ljb/rxjava_for_android
1 0
- (十)【续】网络框架篇(RxJava+OkHttp+Gson)
- RxJava+Retrofit+OkHttp深入浅出-终极封装六特殊篇(变种String替换Gson自由扩展)
- Rxjava+ReTrofit+okHttp深入浅出-终极封装特殊篇(替换Gson返回)
- RxJava+Retrofit+OkHttp深入浅出-终极封装六特殊篇(变种String替换Gson自由扩展)
- RxJava+Retrofit+OkHttp深入浅出-终极封装六特殊篇(变种String替换Gson自由扩展)
- 网络请求框架 Rxjava+ReTrofit+okHttp+MVP
- android 网络框架学习(okhttp,retrofit,rxjava)
- 封装Retrofit + okhttp + rxjava网络请求框架
- Rxjava+retrofit2+OKHttp+GSON实践
- Android okHttp 实战(五):okHttp网络请求之Retrofit+Okhttp+RxJava组合
- Android从零开搞系列:网络框架系列(1)OkHttp+可测试的服务器URL+Gson分析(上)
- Rxjava+Retrofit+Gson组合框架的使用(一)
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- retrofit+RxJava+okhttp简便封装实现网络请求(详解)
- 网络请求篇--Retrofit2.0+RxJava+OkHttp
- 单词王上线了
- POJ 2752
- NSMethodSignature和NSInvocation
- 转-思维要裂变要敢闯想
- wstring
- (十)【续】网络框架篇(RxJava+OkHttp+Gson)
- LeetCode 249. Group Shifted Strings
- IOS delegate 实例
- Struts2项目环境配置_Struts2.2版本以后必须导入的jar包
- 初学Java的类和对象
- Java反射
- 欢迎使用CSDN-markdown编辑器
- 软件工程需求分析
- java web程序升级jsp页面缓存无法显示最新的内容