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;
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;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.wanghaofeangzhuang.Model.base.MyDateGouWU; import com.example.dell.wanghaofeangzhuang.Model.base.MyDeteBean; import com.example.dell.wanghaofeangzhuang.Model.base.MyUpDateBean; import com.example.dell.wanghaofeangzhuang.Model.network.NetWorkOkHttp; import com.example.dell.wanghaofeangzhuang.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) { Gson gson=new Gson(); MyUpDateBean myUpDateBean = gson.fromJson(s, MyUpDateBean.class); pr.add(myUpDateBean); } @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() { } }); } }