RxJava与retorfit联合使用

使用的接口:http://m.yunifang.com/yunifang/mobile/home

创建一个按钮进行点击执行

接口类:IInterface

import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.DELETE;
import retrofit2.http.GET;

/**
 * Created by muhanxi on 17/12/4.
 */

public interface IInterface {



    @GET("/yunifang/mobile/home")
    Call<ResponseBody> get();



    @GET("/yunifang/mobile/home")
    Observable<Bean> get1();

}


主要使用方法:

MainActivity:


import android.app.Activity;
import android.os.Bundle;
import android.view.View;

import com.google.gson.Gson;

import org.reactivestreams.Subscription;

import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import io.reactivex.FlowableEmitter;
import io.reactivex.FlowableOnSubscribe;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.ObservableSource;
import io.reactivex.Observer;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                zip1();
            }
        });













    }
    Disposable disposable = null;


    private void onObserverable(){

        //创建了一个被观察者
        Observable<String> observable =  Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
//                e 发射器

                //发送onnext事件

                for(int i=0;i<100;i++){
//                    if(i == 50){
//                        disposable.dispose();
//                    }
                    e.onNext(""+i);
                    if(i == 50){
//                        e.onComplete();
//                        e.onError(new Exception("1"));
                    }
                    //只要执行了  onComplete  onError , 后续在发送的onNext 事件, 再也无法接受
                }
//                e.onError(new Exception(""));

//                e.onComplete();

            }
        });


        //创建观察者
        Observer observer = new Observer<String>(){

            @Override
            public void onSubscribe(Disposable d) {

                disposable = d ;

//                断开 被观察者和观察者之间的关系
//                disposable.dispose();
                // 判断 被观察者和观察者 之间是否还订阅关系
//                disposable.isDisposed()

            }

            @Override
            public void onNext(String s) {
                //用于接受  被观察者所方法的事件

                System.out.println("Observer s = " + s);

            }

            @Override
            public void onError(Throwable e) {
                //发生异常
                System.out.println("onError s = " + e.getMessage());

            }

            @Override
            public void onComplete() {
//                 事件完成
                System.out.println("onComplete s = ");


            }
        };


        //订阅
        observable.subscribe(observer);
    }


    private void test1(){

        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {

                System.out.println("Observable  " + Thread.currentThread().getName());
                for(int i=0;i<1000;i++){
                    e.onNext(i+"");
                }
                System.out.println("Observable over " );


            }
//            subscribeOn 指定 被观察者所在的线程
        }).subscribeOn(Schedulers.io())
//                指定 观察者所在的线程
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(String s) {
                System.out.println("Observer  " + Thread.currentThread().getName());

                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(" "+ s);

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });

    }





    private void test2(){


        Flowable.create(new FlowableOnSubscribe<String>() {
            @Override
            public void subscribe(FlowableEmitter<String> e) throws Exception {

                for(int i=0;i<1000;i++){
                    e.onNext(""+i);
                }

            }
        }, BackpressureStrategy.LATEST)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String s) throws Exception {

                        Thread.sleep(100);
                        System.out.println("Consumer   " + s);
                    }
                });

    }



    private void test3(){






        Flowable.create(new FlowableOnSubscribe<String>() {
            @Override
            public void subscribe(FlowableEmitter<String> e) throws Exception {

                e.onNext("onnext");
                e.onError(new Exception("1"));
//                e.onComplete();

            }
        },BackpressureStrategy.BUFFER)
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String s) throws Exception {

//                        onnext
                        System.out.println("Consumer  onnext" + s);

                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
//                      onerror
                        System.out.println("Consumer  onerror" + throwable.getMessage());

                    }
                }, new Action() {
                    @Override
                    public void run() throws Exception {
//                          onComplet
                        System.out.println("Consumer  Action");

                    }
                });




    }


    private void test4(){


        Flowable.create(new FlowableOnSubscribe<Integer>() {
            @Override
            public void subscribe(FlowableEmitter<Integer> e) throws Exception {

                e.onNext(1);
                e.onError(new Exception(""));
            }
        },BackpressureStrategy.BUFFER).subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {

                System.out.println(" onNext");
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {
                System.out.println(" onError");

            }
        });




    }




    private void map(){


        Flowable.create(new FlowableOnSubscribe<String>() {
            @Override
            public void subscribe(FlowableEmitter<String> e) throws Exception {
                e.onNext("11");
            }
        },BackpressureStrategy.BUFFER)
                .map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) throws Exception {
                return Integer.valueOf(s);
            }
        }).subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {

                System.out.println("integer = " + integer);
            }
        });




    }




    private void test5(){





        Flowable.create(new FlowableOnSubscribe<String>() {
            @Override
            public void subscribe(final FlowableEmitter<String> e) throws Exception {

                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("http://m.yunifang.com")
                        .build();

                IInterface iInterface =  retrofit.create(IInterface.class);

                iInterface.get().enqueue(new Callback<ResponseBody>() {
                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

                        try {
                            String result =    response.body().string() ;
                            e.onNext(result);
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    }

                    @Override
                    public void onFailure(Call<ResponseBody> call, Throwable t) {

                    }
                });

            }
        },BackpressureStrategy.BUFFER)
                .map(new Function<String, Bean>() {
            @Override
            public Bean apply(String s) throws Exception {

                Gson gson = new Gson();


                return gson.fromJson(s,Bean.class);
            }
        })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Bean>() {
            @Override
            public void accept(Bean bean) throws Exception {

            }
        });


    }





    private void flatMap(){

//        Observable.create(new ObservableOnSubscribe<String>() {
//            @Override
//            public void subscribe(final ObservableEmitter<String> e) throws Exception {
//
//                e.onNext("1");
//                e.onNext("2");
//
                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("")
                        .build();

                final IInterface iInterface = retrofit.create(IInterface.class);

                iInterface.get().enqueue(new Callback<ResponseBody>() {
                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

                        try {
                            String result = response.body().string();

                            e.onNext(result);



                        } catch (IOException e) {
                            e.printStackTrace();
                        }
//
//
//                    }
//
//                    @Override
//                    public void onFailure(Call<ResponseBody> call, Throwable t) {
//
//                    }
//                });
//
//            }
//        }).flatMap(new Function<String, ObservableSource<ArrayList>>() {
//            @Override
//            public ObservableSource<ArrayList> apply(String s) throws Exception {
//
//
//
//                ArrayList list = new ArrayList<>();
//                for (int i=0;i<3;i++){
//                    list.add( s + " " + i);
//                }
//                return Observable.fromArray(list).delay(1, TimeUnit.SECONDS);
//            }
//        }).subscribe(new Consumer<ArrayList>() {
//            @Override
//            public void accept(ArrayList arrayList) throws Exception {
//
//
//                for (int i=0;i<arrayList.size();i++){
//                    System.out.println("arrayList = " + arrayList.get(i));
//                }
//
//            }
//        });


    }




    private void test9(){




    }



    private void t1(IInterface iInterface,String result){
        iInterface.get().enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

                try {
                    String te = response.body().string();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {

            }
        });
    }



    private void concatMap(){

        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {

                e.onNext("1");
                e.onNext("2");
                e.onNext("3");
            }
        }).concatMap(new Function<String, ObservableSource<ArrayList>>() {
            @Override
            public ObservableSource<ArrayList> apply(String s) throws Exception {

                ArrayList list = new ArrayList<>();
                for (int i=0;i<3;i++){
                    list.add( s + " " + i);
                }
                return Observable.fromArray(list).delay(1, TimeUnit.SECONDS);
//                return null;
            }
        }).subscribe(new Consumer<ArrayList>() {
            @Override
            public void accept(ArrayList arrayList) throws Exception {
                for (int i=0;i<arrayList.size();i++){
                    System.out.println("arrayList = " + arrayList.get(i));
                }

            }
        });

    }



    private void zip(){


        Observable<String> observable =  Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {

                e.onNext("1");
                e.onNext("2");
                e.onNext("3");

            }
        });


        Observable<String> observable1 = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                e.onNext("A");
                e.onNext("B");
                e.onNext("C");
            }
        });


        Observable.zip(observable, observable1, new BiFunction<String, String, String>() {
            @Override
            public String apply(String s, String s2) throws Exception {
                return s + s2;
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                System.out.println("s = " + s);
            }
        });




    }



    // rxjava 和retrofit 结合使用

    private void zip1(){




        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://m.yunifang.com")
                .addConverterFactory(GsonConverterFactory.create())
                // call 转化成 Observerable
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        IInterface iInterface = retrofit.create(IInterface.class);

        iInterface.get1()
                // 指定 被观察者 所在一个IO线程
                .subscribeOn(Schedulers.io())
                //指定观察者所在 住县城
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Bean>() {
                    @Override
                    public void accept(Bean bean) throws Exception {

                        System.out.println("bean = " + bean.toString());
                    }
                });




    }





}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值