Retrofit和Rxjava的简单使用

声明本文中的Retrofit均指代Retrofit2.0

首先要导入一些关于retrofit的依赖包,还有它自带的gson包

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
    compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
    //rxjava的依赖
    compile 'io.reactivex.rxjava2:rxjava:2.0.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

创建Retrofit实例

Retrofit build = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(client)
                .build();

使用addCallAdapterFactory向Retrofit注册CustomCallAdapterFactory
addCallAdapterFactory与addConverterFactory同理,也有先后顺序

接口定义

@GET(API.CLASS)
public Flowable<Catagory> getNews();

接口调用

Flowable<Catagory> obserable = RetrofitHelper.getServiceAPI().getNews();//被观察者

        obserable.subscribeOn(Schedulers.io())//被观察者       Scheduler (调度器)

                .observeOn(AndroidSchedulers.mainThread())       //观察者 切换到主线程
                .subscribe(new Consumer<Catagory>() {
                    @Override
                    public void accept(Catagory catagory) throws Exception {
                        //调用成功的方法
                        cgsb.chengGong(catagory);
                    }
                });

让我们来看一下具体的类使用
接口的定义

public interface ServiceAPI {
    @GET(API.CLASS)
    public Flowable<Catagory> getNews();
    @GET(API.PRODUCT_CATAGORY)
    public Flowable<ProductCatagoryBean> getNewss(@Query("cid") String i);
}

RetrofitHelper工具类

public class RetrofitHelper {
    private   static OkHttpClient client;
    private   static ServiceAPI serviceAPI;

    static {
        getClient();
    }
    public static OkHttpClient getClient(){
        if(client==null){
            synchronized (OkHttpClient.class){
                if(client==null){
                    client=new OkHttpClient();
                }
            }
        }
        return client;
    }

    public static ServiceAPI getServiceAPI(){
        if(serviceAPI==null){
            synchronized (ServiceAPI.class){
                if(serviceAPI==null){
                    serviceAPI=onCreate(ServiceAPI.class,API.HOST);
                }
            }
        }
        return serviceAPI;
    }


    public static  <T> T onCreate(Class<T> tclass, String url){

        Retrofit build = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(client)
                .build();

        return build.create(tclass);
    }
}

定义的接口回调

public interface CGSB<T> {
    void chengGong(T t);
    void shiBai(Call<T> call);
}

接口的实现

public interface NewsModelJK {
    void getNews(CGSB<Catagory> cgsb);
    void getProductCatagory(String cid, CGSB<ProductCatagoryBean> cgsb);
}
public class NewsModel implements NewsModelJK {
    @Override
    public void getNews(final CGSB<Catagory> cgsb) {
        Flowable<Catagory> obserable = RetrofitHelper.getServiceAPI().getNews();//被观察者

        obserable.subscribeOn(Schedulers.io())//被观察者       Scheduler (调度器)

                .observeOn(AndroidSchedulers.mainThread())       //观察者 切换到主线程
                .subscribe(new Consumer<Catagory>() {
                    @Override
                    public void accept(Catagory catagory) throws Exception {
                        //调用成功的方法
                        cgsb.chengGong(catagory);
                    }
                });
    }
}

数据的传递

public class NewsPersenter {
    private final NewsModel newsModel;
    private INews iNews;
    public NewsPersenter(INews iNews) {
        newsModel = new NewsModel();
        this.iNews=iNews;
    }
    public void getNews(){
        newsModel.getNews(new CGSB<Catagory>() {
            @Override
            public void chengGong(final Catagory catagory) {
                List<Catagory.DataBean> data = catagory.getData();
                iNews.showBean(data);
            }

            @Override
            public void shiBai(Call<Catagory> call) {

            }
        });
    }
    }
public interface INews {
    void showBean(List<Catagory.DataBean> data);
}
public class MainActivity extends AppCompatActivity implements INews {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLvLeft = (ListView) findViewById(R.id.lv_left);
        mElv = (MyExpanableListView) findViewById(R.id.elv);
        newsPersenter = new NewsPersenter(this);
        newsPersenter.getNews();
        }
    @Override
    public void showBean(List<Catagory.DataBean> data) {
        adapter = new LeftAdapter(this, data);
        mLvLeft.setAdapter(adapter);
    }
}

其中有一点MVP的思想,写到这就差不多了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值