RXJava+Retrofit的结合使用,来同时请求多个网络接口,我们使用的是merge或mergeArray操作符

RXJava+Retrofit的结合使用,来同时请求多个网络接口,我们使用的是merge或mergeArray操作符,
思路来源于博客:http://m.blog.csdn.net/oliver__lau/article/details/78683776

看效果:

RXJava+Retrofit的结合使用,来同时请求多个网络接口,我们使用的是merge或mergeArray操作符_第1张图片

这样就能很好的替代递归的思想,达到快速的请求接口。

见代码:

依赖:

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.0'

/*RetrofitRxAndroid配置依赖*/
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
/*使Retrofit的转化器自定义完成数据的转化
* 就是我们可以接口中少写一些bean
* */
compile 'com.squareup.retrofit2:converter-scalars:+'

/*gson解析*/
compile 'com.google.code.gson:gson:2.8.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'

mainActivity代码:

package bw.com.rxjavahebing;

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

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;


public class MainActivity extends AppCompatActivity {

    String path="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ApiManger apiManger = new Retrofit.Builder()
                .baseUrl("http://www.yulin520.com/")
                .addConverterFactory(ScalarsConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build().create(ApiManger.class);
        Observable manger = apiManger.getManger(path);
//        Observable manger1 = apiManger.getManger(path);
        Observable[] observables = new Observable[10];

        for (int i=0;i<10;i++){
            observables[i]=manger;
        }

        Observable.mergeArray(observables)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {
                }

                @Override
                public void onNext(@NonNull Object o) {
                    Log.i("jiba","MyBean==="+((String)o).toString());

                }

                @Override
                public void onError(@NonNull Throwable e) {
                }

                @Override
                public void onComplete() {
                }
            });
    }
}
 
  

apiServers代码:

package bw.com.rxjavahebing;

import retrofit2.http.GET;
import retrofit2.http.Url;

/**
 * Created by mypc on 2018/1/7.
 */

public interface ApiManger {
    @GET
    io.reactivex.Observable getManger(@Url String url);
}

你可能感兴趣的:(RXJava+Retrofit的结合使用,来同时请求多个网络接口,我们使用的是merge或mergeArray操作符)