import android.os.Environment; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.FormBody; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.scalars.ScalarsConverterFactory; /** * Created by dell on 2018/1/8. */ public class NetWorkOkHttp { public static OkHttpClient okHttpClient; public static NetWorkPort netWorkPort; static { getOkHttpClient(); } public static OkHttpClient getOkHttpClient(){ if(okHttpClient==null){ synchronized (NetWorkOkHttp.class){ File fileDir = new File(Environment.getExternalStorageDirectory(), "cache"); long fileSize = 10 * 1024 * 1024; okHttpClient=new OkHttpClient.Builder() .connectTimeout(20,TimeUnit.SECONDS) .readTimeout(20,TimeUnit.SECONDS) .writeTimeout(20,TimeUnit.SECONDS) .addInterceptor(new CommonParamsInterceptor()) .cache(new Cache(fileDir,fileSize)) .build(); } } return okHttpClient; } public static NetWorkPort getNetWorkPort(){ if(netWorkPort==null){ synchronized (NetWorkOkHttp.class){ netWorkPort=comApiT(NetWorkPort.class); } } return netWorkPort; } public static <T>T comApiT(Class<T> map){ T t=new Retrofit.Builder() .baseUrl("https://www.zhaoapi.cn/product/") .client(okHttpClient) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(ScalarsConverterFactory.create()) .build() .create(map); return t; } private static class CommonParamsInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); String method = request.method(); String oldUrl = request.url().toString(); Map<String,String> map = new HashMap<>(); map.put("source","android"); if ("GET".equals(method)){ StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(oldUrl); if (oldUrl.contains("?")){ if (oldUrl.indexOf("?") == oldUrl.length()-1){ }else { stringBuilder.append("&"); } }else { stringBuilder.append("?"); } for (Map.Entry<String,String> entry: map.entrySet()) { stringBuilder.append(entry.getKey()) .append("=") .append(entry.getValue()) .append("&"); } if (stringBuilder.indexOf("&") != -1){ stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&")); } String newUrl = stringBuilder.toString(); request = request.newBuilder() .url(newUrl) .build(); }else if ("POST".equals(method)){ RequestBody oldRequestBody = request.body(); if (oldRequestBody instanceof FormBody){ FormBody oldBody = (FormBody) oldRequestBody; FormBody.Builder builder = new FormBody.Builder(); for (int i=0;i<oldBody.size();i++){ builder.add(oldBody.name(i),oldBody.value(i)); } for (Map.Entry<String,String> entry:map.entrySet()) { builder.add(entry.getKey(),entry.getValue()); } FormBody newBody = builder.build(); request = request.newBuilder() .url(oldUrl) .post(newBody) .build(); } } Response response = chain.proceed(request); return response; } }}
import java.util.Map; import io.reactivex.Observable; import retrofit2.http.FieldMap; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.QueryMap; import retrofit2.http.Url; /** * Created by dell on 2018/1/8. */ public interface NetWorkPort { @GET public Observable<String> getadd(@Url String url, @QueryMap Map<String, String> map); @POST public Observable<String> getPostadd(@Url String url, @FieldMap Map<String, String> map); }
import com.example.dell.wanghao20fengzhuang.Model.base.MyDateGouWU; import com.example.dell.wanghao20fengzhuang.Model.base.MyDeteBean; import com.example.dell.wanghao20fengzhuang.Model.base.MyDeteDeng; import com.example.dell.wanghao20fengzhuang.Model.network.NetWorkOkHttp; import com.example.dell.wanghao20fengzhuang.presenter.presenter.PresenterPort; import com.google.gson.Gson; import java.util.Map; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by dell on 2018/1/8. */ public class Model implements ModelPort { PresenterPort pr; public Model(PresenterPort pr) { this.pr = pr; } @Override public void addste(String url, Map<String, String> map) { NetWorkOkHttp.getNetWorkPort().getadd(url, map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull String s) { pr.add(s); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } @Override public void xiangQing(String url, Map<String, String> map) { NetWorkOkHttp.getNetWorkPort().getadd(url, map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull String s) { Gson gson=new Gson(); MyDeteBean myDeteBean = gson.fromJson(s, MyDeteBean.class); pr.xiangQing(myDeteBean); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } @Override public void selectGouwu(String url, Map<String, String> map) { NetWorkOkHttp.getNetWorkPort().getadd(url, map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull String s) { Gson gson=new Gson(); MyDateGouWU myDateGouWU = gson.fromJson(s, MyDateGouWU.class); pr.selectGou(myDateGouWU); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } @Override public void dengLu(String url, Map<String, String> map) { NetWorkOkHttp.getNetWorkPort().getadd(url, map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull String s) { Gson gson=new Gson(); MyDeteDeng myDateGouWU = gson.fromJson(s, MyDeteDeng.class); pr.dengLu(myDateGouWU); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } }import java.util.Map; /** * Created by dell on 2018/1/8. */ public interface ModelPort { public void addste(String url, Map<String, String> map); public void xiangQing(String url, Map<String, String> map); public void selectGouwu(String url, Map<String, String> map); public void dengLu(String url, Map<String, String> map); }
封装网络请求框架
最新推荐文章于 2019-07-02 14:25:09 发布