1.M层
package com.bw.ymy.day13.model;
import com.bw.ymy.day13.callback.MyCallBack;
import java.util.Map;
public interface IModel {
void getRequest(String dataUrl, Map<String,String> params, Class clazz, MyCallBack callBack);
}
继承
package com.bw.ymy.day13.model;
import com.bw.ymy.day13.callback.MyCallBack;
import com.bw.ymy.day13.okhttp.ICallBack;
import com.bw.ymy.day13.okhttp.OKhttpUtils;
import java.util.Map;
public class IModelImpl implements IModel {
@Override
public void getRequest(String dataUrl, Map<String, String> params, Class clazz, final MyCallBack callBack) {
OKhttpUtils.getInstance().postEnqueue(dataUrl, params, clazz, new ICallBack() {
@Override
public void onSuccess(Object obj) {
callBack.onsuccess(obj);
}
@Override
public void onFail(Exception e) {
callBack.onsuccess(e);
}
});
}
}
2.V层
package com.bw.ymy.day13.view;
public interface IView<T> {
void onsuccess(T data);
}
3.p层
package com.bw.ymy.day13.presenter;
import java.util.Map;
public interface IPersenter {
void getRequest(String dataUrl, Map<String,String> params, Class clazz);
}
继承
package com.bw.ymy.day13.presenter;
import com.bw.ymy.day13.callback.MyCallBack;
import com.bw.ymy.day13.model.IModelImpl;
import com.bw.ymy.day13.view.IView;
import java.util.Map;
public class IPensenterImpl implements IPersenter {
private IView mIView;
private IModelImpl iModel;
public IPensenterImpl(IView mIView) {
this.mIView = mIView;
iModel=new IModelImpl();
}
public void deteach(){
iModel=null;
mIView=null;
}
@Override
public void getRequest(String dataUrl, Map<String, String> params, Class clazz) {
iModel.getRequest(dataUrl, params, clazz, new MyCallBack() {
@Override
public void onsuccess(Object data) {
mIView.onsuccess(data);
}
});
}
}
4.创建一个MyCallback 和下面的不一样
package com.bw.ymy.day13.callback;
public interface MyCallBack<T> {
void onsuccess(T data);
}
5.1.先创建一个interfance ICallBack
package com.bw.ymy.day13.okhttp;
public interface ICallBack {
void onSuccess(Object obj);
void onFail(Exception e);
}
5.okhttp请求 post
package com.bw.ymy.day13.okhttp;
import android.os.Handler;
import android.os.Looper;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class OKhttpUtils {
//单列
private static OKhttpUtils instance;
private Handler handler=new Handler(Looper.myLooper());
private OkHttpClient httpClient;
public static OKhttpUtils getInstance()
{
if(instance==null)
{
synchronized (OKhttpUtils.class)
{
if(null==instance)
{
instance=new OKhttpUtils();
}
}
}
return instance;
}
//构造方法
private OKhttpUtils()
{
HttpLoggingInterceptor httpLoggingInterceptor=new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY);
httpClient=new OkHttpClient.Builder()
.connectTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(10,TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.build();
}
public void postEnqueue(String urlstr, Map<String,String> param, final Class clazz, final ICallBack callBack)
{
FormBody.Builder builder=new FormBody.Builder();
for (Map.Entry<String,String> entry:param.entrySet())
{
builder.add(entry.getKey(),entry.getValue());
}
RequestBody build=builder.build();
Request builder1=new Request.Builder()
.post(build)
.url(urlstr)
.build();
Call call=httpClient.newCall(builder1);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callBack.onFail(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result=response.body().string();
final Object o=new Gson().fromJson(result,clazz);
handler.post(new Runnable() {
@Override
public void run() {
callBack.onSuccess(o);
}
});
}
});
}
}
所用的权限:
//okhttp依赖
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
// glide加载图片依赖
implementation 'com.github.bumptech.glide:glide:4.8.0'
//recyclerview依赖
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'