package com.mcxtzhang.rxjava2demo.retrofit; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.TextView; import com.google.gson.Gson; import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import com.mcxtzhang.rxjava2demo.R; import com.mcxtzhang.rxjava2demo.retrofit.base.gson.AlyGsonConverterFactory; import com.mcxtzhang.rxjava2demo.retrofit.base.removewrapper.rookie.RxHelper; import com.mcxtzhang.rxjava2demo.retrofit.base.request.FileRequestBodyConverterFactory; import com.mcxtzhang.rxjava2demo.retrofit.base.wrapper.BaseBean; import com.mcxtzhang.rxjava2demo.retrofit.model.bf.BfService; import com.mcxtzhang.rxjava2demo.retrofit.model.bf.PostBean; import java.io.File; import java.io.IOException; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.Cache; import okhttp3.CertificatePinner; import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import static com.mcxtzhang.rxjava2demo.retrofit.model.bf.BfService.httpsCreateOrder; import static com.mcxtzhang.rxjava2demo.retrofit.model.bf.BfService.httpsParams; public class AlyTestActivity extends AppCompatActivity { private static final String TAG = "TAG"; TextView tvResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_aly_test); /*ViewGroup decorView = (ViewGroup) getWindow().getDecorView(); decorView.removeAllViews(); LayoutInflater.from(this).inflate(R.layout.activity_aly_test, decorView);*/ //().addView()); tvResult = (TextView) findViewById(R.id.tvResult); tvResult.setError("???"); //header 追加统一参数 Interceptor headerInterceptor = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Log.d(TAG, "header intercept() called with: chain = [" + chain + "]"); Request original = chain.request(); //append this to url HttpUrl url = original.url().newBuilder().addQueryParameter("appplt", "aph") .addQueryParameter("appid", "1") .addQueryParameter("appver", getAppVersion()) .addQueryParameter("token", Constant.loginToken).build(); //append this to request header Request request = original.newBuilder() .url(url) /* .header("appplt", "aph") .header("appid", "1") .header("appver", getAppVersion()) .header("token", Constant.loginToken) .method(original.method(), original.body())*/ .build(); return chain.proceed(request); } }; Interceptor responseIntercept = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Log.i(TAG, "request====111111111111111111111111111111"); Log.i(TAG, "request header ====" + request.headers().toString()); Response proceed = chain.proceed(request); Log.i(TAG, "Response proceed ====" + proceed.toString()); int code = proceed.code(); if (code != 200) { Log.d(TAG, "code:" + code + ",不是200,说明有错误,我要改成200,否则Retrofit不让我通过。"); Response adapterResponse = proceed.newBuilder() .code(200) .build(); /* Response response422 = new Response.Builder() .code(200) .request(request) .headers(proceed.headers()) .body(proceed.body()) .protocol(proceed.protocol()) .build();*/ return adapterResponse; } return proceed; } }; //返回拦截器 OkHttpClient.Builder builder = new OkHttpClient.Builder(); if (true) { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); builder.addInterceptor(logging); } //开启okhttp缓存 File httpCacheDirectory = new File(getExternalCacheDir(), "zxtokhttpcache"); builder.cache(new Cache(httpCacheDirectory, 10 * 1024 * 1024)); //注意添加顺序 ,按顺序处理的 builder.addInterceptor(headerInterceptor) .addInterceptor(responseIntercept); //Log信息拦截器 // Log信息拦截器 HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); //设置 Debug Log 模式 builder.addInterceptor(loggingInterceptor); String hostname = "breakfast.anlaiye.com.cn"; CertificatePinner certificatePinner = new CertificatePinner.Builder() .add(hostname, "sha256/YgOnceW2Onj7/P40Sfn2D7AMTdAfyhle0Sj12o8axI8=") .add(hostname, "sha256/IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=") .add(hostname, "sha256/K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q=") .build(); OkHttpClient okHttpClient = builder .certificatePinner(certificatePinner) .build(); final String jsonBody = "{\"address\":\"gg\",\"address_id\":\"721866\",\"consignee\":\"gghh\",\"consignee_tel\":\"18616320845\",\"floor_id\":\"98448\",\"gender\":1,\"notice_way\":1,\"order_list\":[{\"comment\":\"\",\"delivery_date\":\"20161123\",\"goods\":[{\"goods_sale_id\":\"54\",\"number\":\"3\",\"price\":0.02},{\"goods_sale_id\":\"45\",\"number\":\"7\",\"price\":0.1}]}],\"payway\":3,\"user_coupon_id\":\"-1\"}"; final PostBean postBean = new Gson().fromJson(jsonBody , PostBean.class); //"https://breakfast.anlaiye.com.cn" final String baseUrl = /*"http://breakfast.imcoming.com.cn"*/ "https://breakfast.anlaiye.com.cn"; //自动剥离方法3: 构造一个特殊的gson (没学会) //Gson gson1 = (new GsonBuilder()).registerTypeAdapterFactory(new ItemTypeAdapterFactory()).create(); final Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) //gson 自动解析实体 //.addConverterFactory(GsonConverterFactory.create()) //注册自定义的工厂类 .addConverterFactory(new FileRequestBodyConverterFactory()) .addConverterFactory(AlyGsonConverterFactory.create()) //自动剥离方法3: 构造一个特殊的gson (没学会) //.addConverterFactory(AlyGsonConverterFactory.create(gson1)) //可以自动转成rxjava的Observable .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io())) .client(okHttpClient) .build(); final BfService movieService = retrofit.create(BfService.class); //Call<BaseBean> baseBeanCall = movieService.test1(postBean); final RequestBody body = RequestBody.create(MediaType.parse("application/json"), /*jsonBody.toString()*/httpsParams); //Call<String> baseBeanCall = movieService.test1WithJson(body); findViewById(R.id.btnSend).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Call<String> baseBeanCall = movieService.testWithAnnotationURL(baseUrl + pathUrl, body); Observable<BaseBean<WxPayBean>> stringObservable = movieService.testRxjava(/*baseUrl + pathUrl*/ httpsCreateOrder, body); /* Observable<String> hha = movieService.testField("http://breakfast.anlaiye.com.cn/aaaa", "张旭童"); hha.subscribe(new Consumer<String>() { @Override public void accept(String s) throws Exception { Log.d(TAG, "accept() called with: s = [" + s + "]"); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Log.d(TAG, "accept() called with: throwable = [" + throwable + "]"); } });*/ /* .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread());*/ // gson工厂不剥离,但是compose 剥离 stringObservable .observeOn(AndroidSchedulers.mainThread()) .compose(RxHelper.<WxPayBean>helper()) .subscribe(new Observer<WxPayBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(WxPayBean value) { Log.d(TAG, "gson工厂不剥离,但是compose 剥离 onNext() called with: value = [" + value + "]"); tvResult.setText(value.toString()); } @Override public void onError(Throwable e) { Log.e(TAG, "gson工厂不剥离,但是compose 剥离 onError() called with: e = [" + e + "]"); tvResult.setText(e.getMessage()); } @Override public void onComplete() { } }); //1 Gson工厂不剥离,所以返回带BaseBean的 /* stringObservable .subscribe(new Observer<BaseBean<WxPayBean>>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe() called with: d = [" + d + "]"); } @Override public void onNext(BaseBean<WxPayBean> value) { Log.d(TAG, "onNext() called with: value = [" + value + "]"); //((Button) findViewById(R.id.btnSend)).setText(value.getData().getOrderId()); } @Override public void onError(Throwable throwable) { Toast.makeText(AlyTestActivity.this, "" + throwable.getMessage(), Toast.LENGTH_SHORT).show(); Log.d(TAG, "onError() called with: e = [" + throwable.getMessage() + "]"); } @Override public void onComplete() { Log.d(TAG, "onComplete() called"); } });*/ //1 Gson 工厂不剥离,返回带BaseBean 利用map剥离 /* stringObservable .map(new RemoveWrapper()) .subscribe(new Observer<WxPayBean>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe() called with: d = [" + d + "]"); } @Override public void onNext(WxPayBean value) { Log.d(TAG, "onNext() called with: value = [" + value + "]"); } @Override public void onError(Throwable e) { Log.d(TAG, "onError() called with: e = [" + e + "]"); Toast.makeText(AlyTestActivity.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show(); } @Override public void onComplete() { Log.d(TAG, "onComplete() called"); } });*/ /* Observable<WxPayBean> testRxjavaNoBaseWrapper = movieService.testRxjavaNoBaseWrapper(httpsCreateOrder, body); testRxjavaNoBaseWrapper.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<WxPayBean>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe() called with: d = [" + d + "]"); } @Override public void onNext(WxPayBean value) { Log.d(TAG, "onNext() called with: value = [" + value + "]"); ((Button) findViewById(R.id.btnSend)).setText(value.getMsg()); } @Override public void onError(Throwable e) { Log.d(TAG, "onError() called with: e = [" + e + "] ,msg = [" + e.getMessage() + "]"); } @Override public void onComplete() { Log.d(TAG, "onComplete() called"); } });*/ /* baseBeanCall.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { Log.d("TAG", "2222222onResponse() called with: call = [" + call + "], response = [" + response + "]"); if (response.isSuccessful()) { String body = response.body(); Log.d(TAG, "1111111111111111111onResponse() called with: body = [" + body); } else { ResponseBody responseBody = response.errorBody(); try { Log.d(TAG, "11111111111111onResponse() error called with: responseBody = [" + responseBody.string()); } catch (IOException e) { e.printStackTrace(); } } } @Override public void onFailure(Call<String> call, Throwable t) { Log.e("TAG", "onFailure() called with: call = [" + call + "], t = [" + t + "]"); } });*/ } }); } protected static String getAppVersion() { return "3.10"; } }