mvp+okhttp请求

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'

猜你喜欢

转载自blog.csdn.net/qq_42902175/article/details/84972040
今日推荐