导入依赖
//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;
}
}