Retrofit2+RxJava2进行网络请求
来源:互联网 发布:手机一直恢复系统数据 编辑:程序博客网 时间:2024/05/16 10:03
请注明出处:http://blog.csdn.net/qq_23179075/article/details/77740373
Retrofit2+RxJava2进行网络请求
Gradle中添加依赖:
compile 'io.reactivex.rxjava2:rxjava:2.1.2'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.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'compile 'com.squareup.okhttp3:okhttp:3.8.1'compile 'com.squareup.okhttp3:logging-interceptor:3.8.1'
定义API接口:
public interface HttpApi { @POST("api/authenticate") Observable<LoginResponse> login(@Body LoginRequest request);}
创建一个Retrofit客户端:
public class RetrofitProvider { public static Retrofit create() { OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.readTimeout(10, TimeUnit.SECONDS); builder.connectTimeout(10, TimeUnit.SECONDS); if (BuildConfig.DEBUG) { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); builder.addInterceptor(interceptor); } return new Retrofit.Builder() .baseUrl(BASE_URL) .client(builder.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); }}
发起请求:
public class MainActivity extends AppCompatActivity { @BindView(R.id.et_name) EditText etName; @BindView(R.id.et_password) EditText etPassword; @BindView(R.id.btn_login) Button btnLogin; /** * 如果在请求的过程中Activity已经退出了, 这个时候如果回到主线程去更新UI, 那么APP肯定就崩溃了 * 使用Disposable 是个开关, 调用它的dispose()方法时就会切断水管, 使得下游收不到事件, 既然收不到事件, * 那么也就不会再去更新UI了. 因此我们可以在Activity中将这个Disposable 保存起来, 当Activity退出时, * 切断它即可. * RxJava中已经内置了一个容器CompositeDisposable, * 每当我们得到一个Disposable时就调用 * CompositeDisposable.add()将它添加到容器中, * 在退出的时候, 调用CompositeDisposable.clear() * 即可切断所有的水管. */ private CompositeDisposable disposables = new CompositeDisposable(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } private void login(LoginRequest loginRequest) { HttpApi api = RetrofitProvider.create().create(HttpApi.class); api.login(loginRequest) .subscribeOn(Schedulers.io())//网络是耗时操作,所以在io线程中去执行 .observeOn(AndroidSchedulers.mainThread())//请求成功后回到主线程中 .subscribe(new Observer<LoginResponse>() { @Override public void onSubscribe(Disposable d) { //保存Disposable disposables.add(d); } @Override public void onNext(LoginResponse loginResponse) { Log.d("MainActivity", "登录成功:"+loginResponse.toString()); } @Override public void onError(Throwable e) { Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show(); } @Override public void onComplete() { Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show(); } }); } @Override protected void onDestroy() { super.onDestroy(); //Activity销毁时断所有连接 disposables.clear(); } @OnClick(R.id.btn_login) public void onViewClicked() { LoginRequest request = new LoginRequest(); request.setUsername(etName.getText().toString().trim()); request.setPassword(etPassword.getText().toString().trim()); login(request); }}
参考文档
阅读全文
0 0
- Retrofit2+RxJava2进行网络请求
- Android RxJava2+Retrofit2搭建网络请求框架
- RxJava2和Retrofit2实现简单网络请求
- rxjava2+rxandroid2+retrofit2 封装网络请求
- Retrofit2+Rxjava2如何主动取消网络请求
- Retrofit2+Rxjava2网络请求框架的封装
- RxJava2+Retrofit2实现网络请求和解析封装
- Android使用Retrofit2.0和RxJava2.0处理网络请求
- RxJava2+Retrofit2网络请求框架封装及使用
- 基于RxJava2+Retrofit2的简单易用网络请求框架
- 简单上手的Retrofit2+Rxjava2网络请求框架
- 简单实现RxJava2+Okhttp+Retrofit2的网络请求框架封装
- Retrofit2+RxAndroid2进行简单的网络请求
- Android基于Retrofit2.0和RXJava2.0 的HTTPS网络请求搭建
- RxEasyHttp一款基于RxJava2+Retrofit2实现简单易用的网络请求框架
- rxjava2 结合retrofit2进行业务封装
- RxJava2+Retrofit2+OkHttp3实现网络缓存
- Rxjava2和Retrofit2网络库的封装
- Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
- 如何停止/重启/启动redis服务
- Map集合的四种遍历方式
- java设计模式
- 转换为字符串时,toString() 与 +"" 的区别
- Retrofit2+RxJava2进行网络请求
- ci框架中的图片上传
- 18:等差数列末项计算
- 关于Android studio无法创建类和接口问题解决办法。
- idea Cannot find declaration to go to问题的解决
- 用C语言实现将一个文件读入内存中
- 动态语言,静态语言的区别
- Android音频焦点详解(下)——源码详解
- 一起来了解垃圾分类