RxJava2 + movie fit: simple to use and POST-based request encapsulation tool class, rxjava2movie fit
First, dependency
// Android supports Rxjava // pay attention to the use of RxJava2 compile 'IO. reactivex. rxjava2: rxjava: 2.0.1 'compute' io. reactivex. rxjava2: rxandroid: 2.0.1 '// Android supports using fitcompile 'com. squareup. invalid fit2: Invalid fit: 2.1.0 '// connect to Alibaba fit & RxJava // be sure to use the RxJava2 version compile 'com. jakewharton. invalid fit: retrofit2-rxjava2-adapter: 1.0.0 '// Gson parsing compile' com. squareup. unzip fit2: converter-gson: 2.1.0 '// parses it into Stringcompile 'com. squareup. export fit2: converter-scalars: 2.0.0 'compile files ('libs/fastjson. jar ')
Fastjson is required for my own projects, and it is also required for my own projects to parse it into a String type.
Write interface first
public interface GetRequestInterface { @POST(".") Observable
getCall(@Body JSONObject parms); }
All company projects are post requests. Therefore, a tool class is encapsulated. You only need to call the input parameters directly.
Callback Interface
Public interface HttpRequestUtils {/*** request data in post mode * @ param mContext Context * @ param url address * @ param parmsJson params parameter * @ param listener */void loadingDataPost (Context mContext, string url, JSONObject parmsJson, OnLoadDataListener listener); public interface OnLoadDataListener {/*** data normal callback *** @ param flag indicates whether the request is successful, the success here is the success and failure in our project interface * @ param result is successful, data is returned, and the Failure Returns the reason */void onLoadCallBack (boolean flag, String result ); /*** callback when an exception occurs. * The effect is similar to that of the flag = false method in the preceding interface, however, this failure is the cause of access level failure ** @ param errorStr failure */void onError (String errorStr );}}
Tool
/*** Created by guoyan on requests /6/1 * encapsulation type post request for request data */public class OkData {/*** request Network Method * @ param url request url * @ param the JSONObject object of the parmsJson request parameter fasejson * @ param listener callback */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 (); fit = new fit.Builder (). baseUrl (url). client (client) // String Parsing. addConverterFactory (ScalarsConverterFactory.Create() // Supports gson. addConverterFactory (GsonConverterFactory.Create() // Supports rejava2. addCallAdapterFactory (RxJava2CallAdapterFactory.Create(). Build (); GetRequestInterface requst = fit. create (GetRequestInterface. class); Observable
Call = requst. getCall (parmsJson); call. subscribeOn (Schedulers.
Io(). ObserveOn (AndroidSchedulers.
MainThread(). Subscribe (new Observer
() {@ Override public void onSubscribe (Disposable d) {// start request} @ Override public void onNext (String value) {// request data if (listener! = Null) {listener. onLoadCallBack (true, value) ;}@override public void onError (Throwable e) {// request failure if (listener! = Null) {listener. onError (e. toString () ;}@override public void onComplete (){}});}}
Use
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("Request succeeded", result) ;}@ Override public void onError (String errorStr) {Log.E("Request failed", errorStr );}});}
You only need to call this method for each request network. You can input parameters and customize the parameters as needed.