RxJava与Retrofit 结合请求后台数据并解析

1.核心: 一个方法类(HttpMethod)+一个接口(HttpService)

public class ADHttpMethods {
    public static final String BASE_URL = "http://172.20.132.196:1660/i/";

    private Retrofit retrofit;
    private ADHttpService movieService;

    private ADHttpMethods() {
        retrofit = new Retrofit.Builder()
                .client(getClient())
                .addConverterFactory(FastJsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl(BASE_URL)
                .build();


        movieService = retrofit.create(ADHttpService.class);
    }

    private OkHttpClient getClient() {
        final Map<String, String> headers = new HashMap<>();
        OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
        if (headers != null) {
            httpClientBuilder.addInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request.Builder requestBuilder = chain.request().newBuilder();
                    Iterator iterator = headers.entrySet().iterator();
                    while (iterator.hasNext()) {
                        Map.Entry entry = (Map.Entry) iterator.next();
                        requestBuilder.addHeader((String) entry.getKey(), (String) entry.getValue());
                    }
                    return chain.proceed(requestBuilder.build());
                }
            });
            //打印json
            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            httpClientBuilder.addInterceptor(loggingInterceptor);
        }
        httpClientBuilder.connectTimeout(10, TimeUnit.SECONDS);
        return httpClientBuilder.build();
    }

    //内部类形式的单例
    private static class SingletonHolder{
        private static final ADHttpMethods INSTANCE = new ADHttpMethods();
    }

    public static ADHttpMethods getInstance(){
        return SingletonHolder.INSTANCE;
    }


    public void getAdBaseData(Subscriber<ADBaseData> subscriber,String url,String schedules,String[] adspace_ids) {
        movieService.getAdBaseData(url,schedules,adspace_ids)
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);

    }

    public void getADAppCategoriesData(Subscriber<ADAppCategoriesData> subscriber,String url) {
        movieService.getADAppCategoriesData(url)
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);

    }
    public void getADAvailableData(Subscriber<ADAvailableData> subscriber,String[]sid) {
        movieService.getADAvailableData(sid)
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);
    }

}
public interface ADHttpService {

    @GET
    Observable<ADBaseData> getAdBaseData(@Url String url,
                                         @Header("schedules")String schedules,
                                         @Header("adspaceids")String[] adspace_ids);

    @GET
    Observable<ADAppCategoriesData> getADAppCategoriesData(@Url String url);

    @GET("index")
    Observable<ADAvailableData> getADAvailableData( @Query("mac") String[]sid);


}
添加依赖

    compile 'com.alibaba:fastjson:latest.integration'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'io.reactivex:rxjava:1.2.4'
    compile 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.2'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'

参考:
 Android Retrofit2.0 查看log和JSON字符串(HttpLoggingInterceptor)  点击打开链接
 RxJava 与 Retrofit 结合的最佳实践    点击打开链接
 Retrofit2-如何在请求时使用动态URL   点击打开链接
 Retrofit2-如何在请求时使用动态header   点击打开链接


demo下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值