前几天分别对Retrofit和RxJava进行了总结,这个帖子打算把Retrofit结合RxJava使用的方法总结以下。有还不了解Retrofit或RxJava的朋友可以参考下面的帖子学习~

【Android - 框架】之Retrofit的使用

【Android - 框架】之RxJava的使用



首先导入依赖:

dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:24.2.1'    testCompile 'junit:junit:4.12'    compile 'com.squareup.retrofit2:retrofit:2.1.0'    compile 'com.squareup.retrofit2:converter-gson:2.1.0'    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'    compile 'io.reactivex:rxjava:1.2.2'    compile 'io.reactivex:rxandroid:1.2.1'}



然后添加权限:



在贴出代码之前先声明一下,这个帖子里面用到的案例和Retrofit的帖子中用到的案例是同一个。


代码:

两者结合的代码(未封装):

        Retrofit retrofit = new Retrofit.Builder()                .baseUrl(SharedData.BASE_URL)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();        RetrofitService service = retrofit.create(RetrofitService.class);        Observable observable = service.getInfoData();        observable                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Subscriber() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(InfoData infoData) {                        Toast.makeText(MainActivity.this, infoData.getName(), Toast.LENGTH_SHORT).show();                    }                });



两者结合的代码(封装):

封装好的工具类:

import com.example.itgungnir.testretrofit_rxjava.share.SharedData;import retrofit2.Retrofit;import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;import rx.Observable;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;/** * 网络访问的工具类 */public class HttpUtil {    private static HttpUtil instance;    private Retrofit retrofit;    private HttpUtil() {        this.instance = this;        this.retrofit = new Retrofit.Builder()                .baseUrl(SharedData.BASE_URL)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();    }    private static HttpUtil getInstance() {        if (instance == null) {            synchronized (HttpUtil.class) {                if (instance == null) {                    return new HttpUtil();                }            }        }        return instance;    }    public static  T getService(Class c) {        return getInstance().retrofit.create(c);    }    public static  void init(Observable observable, Subscriber subscriber) {        observable                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(subscriber);    }}
在主线程中调用工具类:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        HttpUtil.init(HttpUtil.getService(RetrofitService.class).getInfoData(), new Subscriber() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(InfoData infoData) {                Toast.makeText(MainActivity.this, infoData.getName(), Toast.LENGTH_SHORT).show();            }        });    }}



运行结果:




更多相关文章

  1. tcping测试服务器TCP端口
  2. Android实现图片轮播切换实例代码
  3. Android在java代码中设置margin
  4. Android(安卓)---snake源代码分析
  5. Android(安卓)Toast大全(五种情形)建立属于你自己的Toast
  6. android位移动画的两种实现方式
  7. Android(安卓)ProgressDialog工具类
  8. SpyNote5.0 Client_APK逆向分析
  9. android下载系统版本步骤(通过SecureCRT)

随机推荐

  1. Android保存图片到本地或者数据库,并通知
  2. Android屏幕截图并保存截取屏幕的图片到
  3. android 页面容器 下一页很上一页view
  4. java判断http请求是否为为手机端来源
  5. Android(安卓)手势识别
  6. Android定时器实现的几种方式
  7. Android(安卓)带清除功能的输入框控件实
  8. android利用handler回到主线程
  9. android switch button 报 java.lang.Nul
  10. Android uses-permission大全