RxJava和Retrofit的结合封装使用

依赖:

 //*5.0新控件的依赖*//*
    compile 'com.android.support:design:26.0.0-alpha1'
    compile 'com.facebook.fresco:fresco:0.12.0'
//*RxJava与RxAndroid的依赖*//*
    compile 'io.reactivex:rxandroid:1.0.1'
//*Retrofit与RxAndroid配置依赖*//*
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
//*使Retrofit的转化器自定义完成数据的转化
    // 就是我们可以接口中少写一些bean类
    //
    compile 'com.squareup.retrofit2:converter-scalars:+'

retrofit的封装

[html] view plain copy

  1. public class RetrofitHelper  {  
  2.     public static OkHttpClient okHttpClient;  
  3.     public static ApiService apiService;  
  4.   
  5.     static {  
  6.         getOkHttpClient();  
  7.     }  
  8.   
  9.     public static OkHttpClient getOkHttpClient(){  
  10.         if(okHttpClient == null){  
  11.             synchronized (OkHttpClient.class) {  
  12.                 if(okHttpClient == null){  
  13.                     File fileDir = new File(Environment.getExternalStorageDirectory(), "cache");  
  14.                     long fileSize = 10 * 1024 * 1024;  
  15.                     okHttpClient = new OkHttpClient.Builder()  
  16.                             .connectTimeout(15, TimeUnit.SECONDS)  
  17.                             .readTimeout(15, TimeUnit.SECONDS)  
  18.                             .writeTimeout(15, TimeUnit.SECONDS)  
  19.                             .cache(new Cache(fileDir, fileSize))  
  20.                             .build();  
  21.                 }  
  22.             }  
  23.         }  
  24.         return okHttpClient;  
  25.     }  
  26.   
  27.     public static ApiService getApiService(String url){  
  28.         if(apiService == null){  
  29.             synchronized (OkHttpClient.class) {  
  30.                 apiService = createApiService(ApiService.class,url);  
  31.   
  32.             }  
  33.         }  
  34.         return apiService;  
  35.     }  
  36.   
  37.     private static <T>T createApiService(Class<T> tClass,String url) {  
  38.         T t = new Retrofit.Builder()  
  39.                 .baseUrl(url)  
  40.                 .client(okHttpClient)  
  41.                 .addConverterFactory(ScalarsConverterFactory.create())  
  42.                 .addCallAdapterFactory(RxJavaCallAdapterFactory.create())  
  43.                 .build()  
  44.                 .create(tClass);  
  45.         return t;  
  46.     }  
  47.   
  48.     private static class CommonParamsInterceptor implements Interceptor {  
  49.         @Override  
  50.         public Response intercept(Chain chain) throws IOException {  
  51.             Request request = chain.request();  
  52.             String method = request.method();  
  53.             String oldUrl = request.url().toString();  
  54.             Log.e("---拦截器",request.url()+"---"+request.method()+"--"+request.header("User-agent"));  
  55.             Map<String,String> map = new HashMap<>();  
  56.             map.put("source","android");  
  57.   
  58.             if ("GET".equals(method)){  
  59.                 StringBuilder stringBuilder = new StringBuilder();  
  60.                 stringBuilder.append(oldUrl);  
  61.                 if (oldUrl.contains("?")){  
  62.                     if (oldUrl.indexOf("?") == oldUrl.length()-1){  
  63.                     }else {  
  64.                         stringBuilder.append("&");  
  65.                     }  
  66.                 }else {  
  67.                     stringBuilder.append("?");  
  68.                 }  
  69.                 for (Map.Entry<String,String> entry: map.entrySet()) {  
  70.                     stringBuilder.append(entry.getKey())  
  71.                             .append("=")  
  72.                             .append(entry.getValue())  
  73.                             .append("&");  
  74.                 }  
  75.                 if (stringBuilder.indexOf("&") != -1){  
  76.                     stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));  
  77.                 }  
  78.                 String newUrl = stringBuilder.toString();  
  79.                 request = request.newBuilder()  
  80.                         .url(newUrl)  
  81.                         .build();  
  82.             }else if ("POST".equals(method)){  
  83.                 RequestBody oldRequestBody = request.body();  
  84.                 if (oldRequestBody instanceof FormBody){  
  85.                     FormBody oldBody = (FormBody) oldRequestBody;  
  86.                     FormBody.Builder builder = new FormBody.Builder();  
  87.                     for (int i=0;i<oldBody.size();i++){  
  88.                         builder.add(oldBody.name(i),oldBody.value(i));  
  89.                     }  
  90.                     for (Map.Entry<String,String> entry:map.entrySet()) {  
  91.                         builder.add(entry.getKey(),entry.getValue());  
  92.                     }  
  93.                     FormBody newBody = builder.build();  
  94.                     request = request.newBuilder()  
  95.                             .url(oldUrl)  
  96.                             .post(newBody)  
  97.                             .build();  
  98.                 }  
  99.             }  
  100.             Response response = chain.proceed(request);  
  101.             return response;  
  102.         }  
  103.     }  
  104.   
  105. }  

api的base_url的封装

[html] view plain copy

  1. public class Api {  
  2.     public static String BASE_URL="https://www.zhaoapi.cn/";  
  3.   
  4. }  

接口

[html] view plain copy

  1. public  interface ApiService {  
  2.   
  3.     /**  
  4.      * Get基本请求,这里从Call改为Observable被观察者  
  5.      * @param url  
  6.      * @return  
  7.      */  
  8.     @GET  
  9.     public Observable<String> get(@Url String url);  
  10.   
  11.     /**  
  12.      * Get请求提交表单  
  13.      * @param url  
  14.      * @param map  
  15.      * @return  
  16.      */  
  17.     @GET  
  18.     public Observable<String> get(@Url String url, @QueryMap Map<String,String> map);  
  19.   
  20.     /**  
  21.      * Post请求提交表单  
  22.      * @param url  
  23.      * @param map  
  24.      * @return  
  25.      */  
  26.     @FormUrlEncoded  
  27.     @POST  
  28.     public Observable<String> post(@Url String url , @FieldMap Map<String,String> map);  
  29.   
  30. }  

activity

 

[html] view plain copy

  1. public class MainActivity extends AppCompatActivity {  
  2.   
  3.     private TextView tv;  
  4.   
  5.     @Override  
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_main);  
  9.         //获取控件  
  10.         tv = (TextView) findViewById(R.id.text_tv);  
  11.   
  12.            //请求网络  
  13.         getData();  
  14.   
  15.     }  
  16.      /*  
  17.      * 获取网络数据的方法  
  18.      * */  
  19.     private void getData() {  
  20.        // String url = Api.BASE_URL+"ad/getAd";  
  21.         RetrofitHelper.getApiService(Api.BASE_URL).get("ad/getAd")  
  22.   
  23.                 .subscribeOn(Schedulers.io())  
  24.                 .observeOn(AndroidSchedulers.mainThread())  
  25.                 .subscribe(new Observer<String>() {  
  26.                     @Override  
  27.                     public void onSubscribe(@NonNull Disposable d) {  
  28.   
  29.                     }  
  30.   
  31.                     @Override  
  32.                     public void onNext(@NonNull String s) {  
  33.                        tv.setText(s);  
  34.                     }  
  35.   
  36.                     @Override  
  37.                     public void onError(@NonNull Throwable e) {  
  38.   
  39.                     }  
  40.   
  41.                     @Override  
  42.                     public void onComplete() {  
  43.   
  44.                     }  
  45.                 });  
  46.     }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值