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 get();



    @GET("/yunifang/mobile/home")
    Observable 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 observable =  Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter 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(){

            @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() {
            @Override
            public void subscribe(ObservableEmitter 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() {
            @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() {
            @Override
            public void subscribe(FlowableEmitter e) throws Exception {

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

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

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

    }



    private void test3(){






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

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

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

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

                    }
                }, new Consumer() {
                    @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() {
            @Override
            public void subscribe(FlowableEmitter e) throws Exception {

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

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

            }
        });




    }




    private void map(){


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

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




    }




    private void test5(){





        Flowable.create(new FlowableOnSubscribe() {
            @Override
            public void subscribe(final FlowableEmitter 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() {
                    @Override
                    public void onResponse(Call call, Response response) {

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

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

                    }
                });

            }
        },BackpressureStrategy.BUFFER)
                .map(new Function() {
            @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() {
            @Override
            public void accept(Bean bean) throws Exception {

            }
        });


    }





    private void flatMap(){

//        Observable.create(new ObservableOnSubscribe() {
//            @Override
//            public void subscribe(final ObservableEmitter 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() {
////                    @Override
////                    public void onResponse(Call call, Response response) {
////
////                        try {
////                            String result = response.body().string();
////
////                            e.onNext(result);
////
////
////
////                        } catch (IOException e) {
////                            e.printStackTrace();
////                        }
//
//
//                    }
//
//                    @Override
//                    public void onFailure(Call call, Throwable t) {
//
//                    }
//                });
//
//            }
//        }).flatMap(new Function>() {
//            @Override
//            public ObservableSource 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() {
//            @Override
//            public void accept(ArrayList arrayList) throws Exception {
//
//
//                for (int i=0;i>() {
            @Override
            public ObservableSource 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() {
            @Override
            public void accept(ArrayList arrayList) throws Exception {
                for (int i=0;i observable1 = Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
                e.onNext("A");
                e.onNext("B");
                e.onNext("C");
            }
        });


        Observable.zip(observable, observable1, new BiFunction() {
            @Override
            public String apply(String s, String s2) throws Exception {
                return s + s2;
            }
        }).subscribe(new Consumer() {
            @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() {
                    @Override
                    public void accept(Bean bean) throws Exception {

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




    }





}





你可能感兴趣的:(RxJava与retorfit联合使用)