Retrofit2和RxJava2的使用介绍一

这次是代码加注释版,Retrofit2和Rxjava2的单独使用,之前有单独的博客分析,这一篇主要是讲一个简单的Demo,将这两货联合使用

先看依赖

    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    compile 'com.squareup.retrofit2:converter-gson:2.2.0'
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'com.jakewharton:butterknife:8.5.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.0.8'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'

请忽略其中的黄油刀。。。

然后还需要网络权限

<uses-permission android:name="android.permission.INTERNET"/>

我简单说一下这个Demo,我没有用到UI的任何操作,就是一个默认的xml

直接看代码

package com.tyran.rxjava_retrofit_demo1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.util.List;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;

/**
 * RxJava2 And Retrofit2
 * 把思路先理一下,RxJava2作为异步传输队列,将Retrofit2从网络获取的信息,从IO线程(网络请求)发送到UI线程(主线程)
 * 1、Retrofit2作为Observable(被观察者/发送方)
 * 2、提供一个在主线程运行的Observer(观察者/接收方)
 * 3、通过内部接口连接注册,
 */

public class MainActivity extends AppCompatActivity {

    Retrofit retrofit;
    WashService washService;
    Observable<GsonWash> washObservable;
    CompositeDisposable compositeDisposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //这是一个控制观察者主动与被观察连接的内置控制类
        compositeDisposable = new CompositeDisposable();
        //初始化
        InitRetrofit();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //activity销毁的时候,切断所有联系
        compositeDisposable.clear();
    }

    private void InitRetrofit() {
        //开始初始化Retrofit
        retrofit = new Retrofit.Builder()
                .baseUrl("http://cloud.bmob.cn/")
                //收到的内容自动转化为一个GsonFormat生成的类
                .addConverterFactory(GsonConverterFactory.create())
                //添加一个RxJava2的adapter
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        //实例化Retrofit2的请求接口
        washService = retrofit.create(WashService.class);
        //通过接口就可以请求到数据
        washObservable = washService.washCall();
        //绑定观察者和被观察者,当绑定之后,就会发送Retrofit2所请求到的数据到Observer
        InitRxJava2(new Observer<GsonWash>() {

            @Override
            public void onSubscribe(Disposable d) {
                //把切断管道的控制器发送给总控制器
                compositeDisposable.add(d);
            }

            @Override
            public void onNext(GsonWash gsonWash) {
                List<GsonWash.WashInfoBean> washInfo = gsonWash.getWashInfo();
                Log.d("MainActivity", "GetData At " + Thread.currentThread().getName());
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
    }

    //这里就是绑定观察者和被观察者的操作
    private void InitRxJava2(Observer<GsonWash> washObserver) {
        washObservable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(washObserver);
    }

    interface WashService {
        @GET("d9f6840be6bb07cf/wash_test?clive=wash")
        //如果这里需要嵌套Rxjava2的话,返回的就应该是一个被观察者
        Observable<GsonWash> washCall();
    }
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值