Retrofit和RxJava的封装
来源:互联网 发布:sd卡损坏怎么恢复数据 编辑:程序博客网 时间:2024/05/21 12:48
导入依赖
//retrofit的依赖 compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-scalars:2.0.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' //rxjava的依赖 compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.7'
加入权限
<uses-permission android:name="android.permission.INTERNET" />
retrofit的封装类
import retrofit2.Retrofit;import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;import retrofit2.converter.scalars.ScalarsConverterFactory;/** * Created by muhanxi on 17/12/5. */public class RetrofitUtils { private static APIService service = null ; public static APIService getInstance(){ if(service == null){ synchronized (RetrofitUtils.class){ Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://m.yunifang.com") .addConverterFactory(ScalarsConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(OkHttpUtils.getInstance()) .build(); service = retrofit.create(APIService.class); } } return service; }}
okhttp的封装类import java.util.concurrent.TimeUnit;import okhttp3.OkHttpClient;/** * Created by muhanxi on 17/12/5. * @author muhanxi */public class OkHttpUtils { private static OkHttpClient client = null ; public static OkHttpClient getInstance(){ if(client == null){ synchronized (OkHttpUtils.class){ if(client == null){ client = new OkHttpClient.Builder() .connectTimeout(20000, TimeUnit.SECONDS) .writeTimeout(20000,TimeUnit.SECONDS) .readTimeout(20000,TimeUnit.SECONDS) //.addInterceptor(new CommonHeaderInterceptor()) //.addInterceptor(new LoggingInterceptor()) .build(); } } } return client; }
观察者Observer的封装
import com.google.gson.Gson;import com.google.gson.JsonSyntaxException;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import io.reactivex.Observer;import io.reactivex.disposables.Disposable;/** * Created by muhanxi on 17/12/5. */public abstract class AbstractObserver<T> implements Observer<String> { public abstract void onSuccess(T t); /** * 1 当前 网络异常 * 2 json 解析异常 * 2 未知异常 * @param code */ public abstract void onFailure(int code); @Override public void onSubscribe(Disposable d) { } @Override public void onNext(String result) { try { Type type = getClass().getGenericSuperclass() ; Type [] types = ((ParameterizedType)type).getActualTypeArguments() ; Class clazz = (Class) types[0] ; Gson gson = new Gson(); T t = (T) gson.fromJson(result,clazz); onSuccess(t); } catch (JsonSyntaxException e) { e.printStackTrace(); onFailure(2); }catch (Exception e){ e.printStackTrace(); onFailure(3); } } @Override public void onError(Throwable e) { onFailure(1); System.out.println(e ); } @Override public void onComplete() { }}
Retrofit的接口import java.util.Map;import io.reactivex.Observable;import retrofit2.http.FieldMap;import retrofit2.http.FormUrlEncoded;import retrofit2.http.GET;import retrofit2.http.POST;import retrofit2.http.QueryMap;import retrofit2.http.Url;/** * Created by muhanxi on 17/12/5. */public interface APIService { @GET Observable<String> get(@Url String url, @QueryMap Map<String,String> map); @GET Observable<String> get(@Url String url); @FormUrlEncoded @POST Observable<String> post(@Url String url, @FieldMap Map<String,String> map);}
APIFactory.java这个类里面有对应的四个方法get1, post1import java.util.Map;import io.reactivex.Observer;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.schedulers.Schedulers;/** * Created by muhanxi on 17/12/5. */public class APIFactory { private APIFactory(){} private static APIFactory factory = null ; public static APIFactory getInstance(){ if(factory == null){ synchronized (APIFactory.class){ if(factory == null){ factory = new APIFactory(); } } } return factory; } public void get(String url, Map<String,String> map, Observer<String> observer){ RetrofitUtils.getInstance().get(url,map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void get(String url,Observer<String> observer){ RetrofitUtils.getInstance().get(url) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void post(String url,Map<String,String> map,Observer<String> observer){ RetrofitUtils.getInstance().post(url,map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); }}
LoggingInterceptor日志拦截器的封装
import java.io.IOException;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;class LoggingInterceptor implements Interceptor { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request request = chain.request(); long t1 = System.nanoTime(); Response response = chain.proceed(request); long t2 = System.nanoTime(); System.out.println(" this request url " + response.request().url() + " " + (t2 - t1)/1000000); return response; }}
CommonHeaderInterceptor公共的请求头拦截器import java.io.IOException;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;/** * Created by muhanxi on 17/12/5. */public class CommonHeaderInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Request.Builder builder = request.newBuilder() ; builder.addHeader("key","11"); builder.addHeader("User-Agent","android"); return chain.proceed(builder.build()); }}
MVP
public class AddModel { public void getData(String pid, final IModel iModel){ Map<String, String> map = new HashMap<>();// https://www.zhaoapi.cn/product/addCart?uid=1245&pid=45&token=86B6DEFFD9DEF5FF93C3E7BA5560A0E6&Source=android map.put("uid","1245"); map.put("pid",pid); map.put("token","86B6DEFFD9DEF5FF93C3E7BA5560A0E6"); map.put("Source","android"); APIFactory01.getInstance().post1("/product/addCart", map, new AbstractObserver01<AddBean>() { @Override public void onSuccess(AddBean addBean) { iModel.success(addBean); } @Override public void onFailure() { } }); } public interface IModel{ //成功 失败 public void success(AddBean bean); public void failrue(); }}
public interface AddView { //成功 失败 public void success(AddBean bean); public void failrue();}
public class AddPresenter { AddView view; private final AddModel model; public AddPresenter(AddView view) { this.view = view; model = new AddModel(); } public void shangpin(String pid){ model.getData(pid, new AddModel.IModel() { @Override public void success(AddBean bean) { view.success(bean); } @Override public void failrue() { } }); } //防止内存遗漏 public void datach(){ this.view = null; }}
阅读全文