RxJava2和Retrofit2实现简单网络请求
来源:互联网 发布:2012年梅西进球数据 编辑:程序博客网 时间:2024/06/01 10:40
RxJava2和Retrofit2实现简单网络请求
感谢来福岛的一个笑话api
api为:http://api.laifudao.com/open/xiaohua.json
添加依赖
compile 'io.reactivex.rxjava2:rxjava:+' compile 'io.reactivex.rxjava2:rxandroid:+' compile 'com.squareup.retrofit2:retrofit:+' compile 'com.squareup.retrofit2:converter-gson:+' compile 'com.squareup.retrofit2:adapter-rxjava2:+' compile 'com.squareup.okhttp3:logging-interceptor:+' compile 'com.squareup.okhttp3:okhttp:+' compile 'com.jakewharton:butterknife:+' annotationProcessor 'com.jakewharton:butterknife-compiler:+'
构建HttpMethods
public class HttpMethods { private static final HttpMethods httpMethods = new HttpMethods(); private static Retrofit retrofit; private static RetrofitService service = null ; private static final int TIME_OUT=4; /** * 私有化构造方法 */ private HttpMethods(){ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { @Override public void log(String message) { Log.d("HttpLog",message); } }); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient .newBuilder() .connectTimeout(TIME_OUT, TimeUnit.SECONDS) .addInterceptor(loggingInterceptor); retrofit = new Retrofit.Builder() .baseUrl("http://api.laifudao.com/open/") .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); } public static HttpMethods getHttpMethods (){ return httpMethods; } /** * 提供接口,获取RetrofitService * @return */ public static RetrofitService getRetrofit(){ if (service==null){ service = retrofit.create(RetrofitService.class); } return service; }}
RetrofitService
public interface RetrofitService { @GET("xiaohua.json") Observable<List<MyJoke>> getData();}
实体类
public class MyJoke { private String title; private String content; private String poster; private String url; @Override public String toString() { return "MyJoke{" + "title='" + title + '\'' + ", content='" + content + '\'' + ", poster='" + poster + '\'' + ", url='" + url + '\'' + '}'; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getPoster() { return poster; } public void setPoster(String poster) { this.poster = poster; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; }}
MainActivity
public class MainActivity extends AppCompatActivity { @BindView(R.id.text) TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); /** * 在RxJava中,Scheduler相当于线程控制器,可以通过它来指定每一段代码运行的线程。 * RxJava已经内置了几个Scheduler: * Schedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认的Scheduler。 * Schedulers.newThread(): 总是启用新线程,并在新线程执行操作。 * Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的Scheduler。行为模式和newThread()差不多, * 区别在于io()的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下io()比newThread()更有效率。 * 不要把计算工作放在io()中,可以避免创建不必要的线程。 * Schedulers.computation(): 计算所使用的Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作, * 例如图形的计算。这个Scheduler使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在computation()中,否则 I/O 操作的等待时间会浪费 CPU。 * AndroidSchedulers.mainThread(),Android专用线程,指定操作在主线程运行。 * 参考自:http://www.jianshu.com/p/856297523728 */ HttpMethods.getRetrofit().getData() .subscribeOn(Schedulers.io()) //指定subscribe()订阅所发生的线程,即 call() 执行的线程。或者叫做事件产生的线程 .unsubscribeOn(Schedulers.io())//设置解除订阅在哪个调度器,即线程 .observeOn(AndroidSchedulers.mainThread()) /*指定Observer所运行在的线程,即onNext()执行的线程。或者叫做事件消费的线程。 AndroidSchedulers.mainThread() Android专用线程,指定操作在主线程运行*/ .subscribe(new Observer<List<MyJoke>>() { Disposable d; @Override public void onSubscribe(@NonNull Disposable d) { this.d=d; } @Override public void onNext(@NonNull List<MyJoke> myJokes) { text.setText(myJokes.get(0).toString()); } @Override public void onError(@NonNull Throwable e) { d.dispose();//解除订阅 } @Override public void onComplete() { d.dispose(); } }); }}
阅读全文
0 0
- RxJava2和Retrofit2实现简单网络请求
- 简单实现RxJava2+Okhttp+Retrofit2的网络请求框架封装
- RxJava2+Retrofit2实现网络请求和解析封装
- Retrofit2+RxJava2进行网络请求
- RxEasyHttp一款基于RxJava2+Retrofit2实现简单易用的网络请求框架
- 基于RxJava2+Retrofit2的简单易用网络请求框架
- 简单上手的Retrofit2+Rxjava2网络请求框架
- Android使用Retrofit2.0和RxJava2.0处理网络请求
- Android RxJava2+Retrofit2搭建网络请求框架
- rxjava2+rxandroid2+retrofit2 封装网络请求
- Retrofit2+Rxjava2如何主动取消网络请求
- Retrofit2+Rxjava2网络请求框架的封装
- Retrofit2.0 简单实现的网络请求
- RxJava2+Retrofit2+OkHttp3实现网络缓存
- Rxjava2和Retrofit2网络库的封装
- RxJava2和Retrofit2.0的简单使用
- Android基于Retrofit2.0和RXJava2.0 的HTTPS网络请求搭建
- 简单封装retrofit2+rxjava2
- Idea快捷键大全
- HDU 1255 覆盖的面积(线段树+面积交)
- 奶牛的编号
- 怎么监控安卓的CPU、内存---使用emmagee软件监控
- 缓存检索的介绍
- RxJava2和Retrofit2实现简单网络请求
- 无法连接到云服务器上的MYSQL
- Java学习第十天
- linux下nfs服务器的安装与挂载
- python 通过电话号码获取微信性别信息
- Python随笔1
- BZOJ 5056 OI游戏 (最短路径树)
- java web 实现用户登录界面
- 为什么没有字节流转字符流的IO对象?