IContact
package com.example.three_week_demo;
import java.util.Map;
/**
* 契约类
*/
public interface IContact {
interface IView{
void onSuccess(String json);
void onError(String error);
}
interface IModel{
void getData(String url, Map<String,Object> map, Callback callback);
}
interface IPresenter{
void startRequest(String url,Map<String,Object> map);
void onDetach();
}
interface Callback{
void onSuccess(String json);
void onError(String error);
}
}
ModelImpl
package com.example.three_week_demo.model;
import com.example.three_week_demo.IContact;
import com.example.three_week_demo.utils.MyNetUtils;
import java.util.Map;
public class ModelImpl implements IContact.IModel {
@Override
public void getData(String url, Map<String, Object> map, final IContact.Callback callback) {
MyNetUtils.getInstance().getInfo(url, map, new MyNetUtils.MyCallBack() {
@Override
public void success(String jsonStr) {
callback.onSuccess(jsonStr);
}
@Override
public void error(String error) {
callback.onError(error);
}
});
}
public void getDeleteData(String url, Map<String, Object> map, final IContact.Callback callback) {
MyNetUtils.getInstance().deleteInfo(url, map, new MyNetUtils.MyCallBack() {
@Override
public void success(String jsonStr) {
callback.onSuccess(jsonStr);
}
@Override
public void error(String error) {
callback.onError(error);
}
});
}
}
PresenterImpl
package com.example.three_week_demo.presenter;
import com.example.three_week_demo.IContact;
import com.example.three_week_demo.model.ModelImpl;
import java.lang.ref.SoftReference;
import java.util.Map;
public class PresenterImpl implements IContact.IPresenter {
private ModelImpl mModel;
private IContact.IView mIView;
private SoftReference<IContact.IView> mSoft;
public PresenterImpl(IContact.IView iView) {
mModel = new ModelImpl();
this.mIView = iView;
mSoft = new SoftReference<>(mIView);
}
@Override
public void startRequest(String url, Map<String, Object> map) {
mModel.getData(url, map, new IContact.Callback() {
@Override
public void onSuccess(String json) {
mIView.onSuccess(json);
}
@Override
public void onError(String error) {
mIView.onError(error);
}
});
}
public void startDeleteRequest(String url, Map<String, Object> map) {
mModel.getDeleteData(url, map, new IContact.Callback() {
@Override
public void onSuccess(String json) {
mIView.onSuccess(json);
}
@Override
public void onError(String error) {
mIView.onError(error);
}
});
}
@Override
public void onDetach() {
if (mSoft != null) {
mSoft.clear();
}
if (mModel != null) {
mModel = null;
}
}
}
MyNetUtils
package com.example.three_week_demo.utils;
import com.example.three_week_demo.MyBaseUrl;
import com.example.three_week_demo.MyRxApi;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* 最终版网络工具类
*/
public class MyNetUtils {
private MyRxApi myRxApi;
private MyNetUtils() {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()