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 点击打开链接