RxJava结合Retrofit实现的网络请求(Observable被观察者和 Subscriber观察者)
来源:互联网 发布:网络暴力产生问题 编辑:程序博客网 时间:2024/06/06 02:19
1.1、先导入依赖: compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1'1.2、简单理解: a.是一个异步操作,在子线程更改数据,在主线程做更新操作。 b.被观察者是事件的产生方相当于子线程,观察者是消费者相当于主线程; 他们是通过订略的方式进行连接。 c.观察者 与 被观察者观察者:Subscriber 一般作用于 V层,负责接收 被观察者 传递过来的信息被观察者:Observable 一般作用于 M层,负责发送 信息给 观察者
一、MainActivity的主方法
public class MainActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.main_tv); /** * 初始化 观察者 */ Subscriber<String> subscriber = new Subscriber<String>() { /** * 完成回调方法 */ @Override public void onCompleted() { } /** * 错误回调方法 * @param e */ @Override public void onError(Throwable e) { } /** * 接收并处理回调方法 * @param s */ @Override public void onNext(String s) { tv.setText(s); } }; OkHttps.getData(subscriber); }}
二、被观察者的方法
/** * 网络请求类 */public class OkHttps { private static final String TAG="okhttps"; /** * 网络请求网址 */ private static final String PATHS="http://api.expoon.com/AppNews/getNewsList/"; public static void getData(final Subscriber subscriber){ /** * 实例化 Retrofit对象 * 构建者方法创建对象 链表式创建方法 */ /** * 添加 拦截器 */ OkHttpClient client = new OkHttpClient.Builder().addNetworkInterceptor(new iii()).build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(PATHS) .client(client) .addConverterFactory(GsonConverterFactory.create()) .build(); /** * 实例化 接口对象 */ DataService dataService = retrofit.create(DataService.class); /** * 调用 接口中的方法 * 请求网络 并返回Call集合 */ Call<RsBean> data = dataService.getData(); /** * 开始请求 将数据放入集合 */ data.enqueue(new Callback<RsBean>() { @Override public void onResponse(Call<RsBean> call, final Response<RsBean> response) { Log.i(TAG, "onResponse: "+response.body().toString()); /** * 创建 被观察者 * 其作用发送消息给观察者 */ Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { /** * 发送消息给观察者 */ subscriber.onNext(response.body().toString()); subscriber.onCompleted(); } }); /** * 绑定 观察者 与 被观察者 */ observable.subscribe(subscriber); } @Override public void onFailure(Call<RsBean> call, Throwable t) { } }); } //设置插值器(拦截器) static class iii implements Interceptor { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); Headers headers = request.headers(); for (int i = 0; i < headers.size(); i++) { String name = headers.name(i); String value = headers.value(i); Log.i(TAG, "intercept: " + "name=" + name + " " + value); } okhttp3.Response response = chain.proceed(request); return response; } }}
阅读全文
0 0
- RxJava结合Retrofit实现的网络请求(Observable被观察者和 Subscriber观察者)
- rxjava 和retrofit 结合使用 请求网络
- 利用观察者(Observer)和被观察者(Observable)实现监听操作
- Retrofit+Rxjava 网络请求的简单封装(一)(观察者模式)
- Retrofit+Rxjava 网络请求的完美封装(二)(观察者模式)
- Rxjava 被观察者Observable的建立方式,含义
- Rxjava--Subscriber创建流程(观察者)
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- 使用Retrofit结合RxJava实现Get与Post网络请求
- RxJava结合Retrofit对网络请求结果的统一处理
- java observer和observable 实现观察者模式
- 观察者模式实践 rxjava+retrofit
- rxjava+retrofit+okhttp实现流行的网络请求
- 关于RxJava Observable 和 Subscriber之间的调用关系和原理
- android Observable(观察者)的定义
- Retrofit + Rxjava + RxAndroid实现网络请求
- MVP(Retrofit+RXJava)实现网络请求
- java学习 表达式语言内置对象
- path
- [YTU]_2633( P3 数钱是件愉快的事)
- 筛法求素数
- 关于android抓包替换响应内容操作
- RxJava结合Retrofit实现的网络请求(Observable被观察者和 Subscriber观察者)
- [YTU]_2617(B C++时间类的运算符重载)
- Linux:I/O多路转接之select(有图有代码有真相!!!)
- spring boot学习8之Servlet/Filter/Listener配置
- SqlServer数据库MDF、NDF、LDF文件简介
- 多线程与多进程比较
- java StringBuffer常用方法
- 运用Chrome浏览器ADB插件获取页面元素
- c++中的信号与QML中的函数绑定(链接)起来 以及qml与c++交互重要笔记