RxJava2+retrofit简单使用及基于POST请求封装工具类

首先依赖

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Android 支持 Rxjava
// 此处一定要注意使用RxJava2的版本
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
// Android 支持 Retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
// 衔接 Retrofit & RxJava
// 此处一定要注意使用RxJava2的版本
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
// 支持Gson解析
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
//解析成String
compile 'com.squareup.retrofit2:converter-scalars:2.0.0'
compile files( 'libs/fastjson.jar' )

fastjson是我自己项目需要用到,解析成String类型的也是我自己项目需要用到的。

先写接口

?
1
2
3
4
5
6
7
public interface GetRequestInterface {
 
     @POST ( "." )
     Observable getCall( @Body JSONObject parms);
     
}

公司项目全部是post请求的,所以就封装一个工具类,只需要直接调用传入参数就可以。

回调接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public interface HttpRequestUtils {
     /**
      *  post方式请求数据
      * @param mContext 上下文
      * @param url 地址
      * @param parmsJson  params参数
      * @param listener
      */
     void loadingDataPost(Context mContext, String url, JSONObject parmsJson
             , OnLoadDataListener listener);
 
     public interface OnLoadDataListener {
 
         /**
          * 数据正常回调
          *
          * @param flag   是否请求成功,这里的成功是在我们项目接口里面的成功和失败
          * @param result 成功则返回数据,失败则返回原因
          */
         void onLoadCallBack( boolean flag, String result);
 
         /**
          * 出现异常时候的回调,
          * 效果和上面的接口种的flag=false类似,但是这个失败是属于访问层次的失败
          *
          * @param errorStr 失败的原因
          */
         void onError(String errorStr);
     }
}

工具类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
  * Created by guoyan on 2017/6/1
  * 请求数据的封装类 post请求
  */
 
public class OkData {
     /**
      * 请求网络的方法
      * @param url 请求url
      * @param parmsJson 请求参数 fasejson的JSONObject对象
      * @param listener  请求回调
      */
     public void requesData(String url, JSONObject parmsJson, final HttpRequestUtils.OnLoadDataListener listener) {
         OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
         httpClient.addInterceptor( new Interceptor() {
             @Override
             public Response intercept(Interceptor.Chain chain) throws IOException {
                 Request original = chain.request();
                 Request request = original.newBuilder()
                         .addHeader( "key" , EncoderByMd5())
                         .addHeader( "version" , "1.5.1" )
                         .addHeader( "application/json" , "charset=utf-8" )
                         .method(original.method(), original.body())
                         .build();
 
                 return chain.proceed(request);
             }
         });
         OkHttpClient client = httpClient.build();
 
         Retrofit retrofit = new Retrofit.Builder()
                 .baseUrl(url)
                 .client(client)
                 //字符串解析
                 .addConverterFactory(ScalarsConverterFactory.create())
                 //支持gson
                 .addConverterFactory(GsonConverterFactory.create())
                 //支持rejava2
                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                 .build();
 
         GetRequestInterface requst = retrofit.create(GetRequestInterface. class );
 
         Observable call = requst.getCall(parmsJson);
         call.subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribe( new Observer() {
                     @Override
                     public void onSubscribe(Disposable d) {
                         //开始请求
                     }
 
                     @Override
                     public void onNext(String value) {
                         //请求数据
                         if (listener != null ) {
                             listener.onLoadCallBack( true , value);
                         }
                     }
 
                     @Override
                     public void onError(Throwable e) {
                         //请求失败
                         if (listener != null ) {
                             listener.onError(e.toString());
                         }
                     }
 
                     @Override
                     public void onComplete() {
 
                     }
                 });
     }
}
?
1
 

使用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void initData() {
         JSONObject parmsJson = new JSONObject();
         parmsJson.put( "client" , "" );
         parmsJson.put( "blackBox" , "" );
         parmsJson.put( "token" , "" );
         parmsJson.put( "type_id" , "" );
         parmsJson.put( "product_id" , "" );
         parmsJson.put( "ruleSize" , 7 );
         OkData data = new OkData();
         data.requesData(url, parmsJson, new HttpRequestUtils.OnLoadDataListener() {
             @Override
             public void onLoadCallBack( boolean flag, String result) {
                 Log.e( "请求成功" ,result);
             }
 
             @Override
             public void onError(String errorStr) {
                 Log.e( "请求失败" ,errorStr);
             }
         });
}

每次请求网络只需要调用这一个方法,传入参数就可以了,可以根据自己的需求,自己定制。

你可能感兴趣的:(RxJava2+retrofit简单使用及基于POST请求封装工具类)