引入依赖
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
传值为MAP
//点击登录按钮
private void getLogin() {
Map<String,String> params = new HashMap<>();
params.put("mobile",edit_mobile.getText().toString());
params.put("password",edit_password.getText().toString());
iPersenter.startRequest(Apis.URL_LOGIN,params,PhoneBean.class);
}
上方的接口
package jx.com.week2_1;
public class Apis {
public static final String URL_LOGIN = "http://www.zhaoapi.cn/user/login?mobile=%s&password=%s";
}
Model接口
package jx.com.week2_1.model;
import java.util.Map;
import jx.com.week2_1.callback.ICallBack;
public interface IModel {
void requestData(String path, Map<String,String> params, Class clazz, ICallBack iCallBack);
void upLoddimg(String path, Map<String,String> map, Class clazz, ICallBack iCallBack);
}
Model层
package jx.com.week2_1.model;
import android.net.Network;
import android.os.AsyncTask;
import java.util.Map;
import jx.com.week2_1.callback.ICallBack;
import jx.com.week2_1.okhttp.OkCallBack;
import jx.com.week2_1.okhttp.OkHttpUtils;
import jx.com.week2_1.utils.NetUtil;
public class IModelImpl implements IModel{
/**
*
* @param path
* @param params
* @param clazz
* @param iCallBack
*/
@Override
public void requestData(String path, Map<String, String> params, Class clazz, final ICallBack iCallBack) {
OkHttpUtils.getInstance().postEnqueue(path, params, clazz, new OkCallBack() {
@Override
public void success(Object obj) {
iCallBack.getRequest(obj);
}
@Override
public void failed(Exception e) {
iCallBack.getRequest(e.getMessage());
}
});
}
@Override
public void upLoddimg(String path, Map<String, String> map, Class clazz, ICallBack iCallBack) {
}
}
okCalback
package jx.com.week2_1.okhttp;
public interface OkCallBack {
void success(Object obj);
void failed(Exception e);
}
okHttp
package jx.com.week2_1.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.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class OkHttpUtils {
private OkHttpClient mClient;
private Handler handler = new Handler(Looper.getMainLooper());
//懒汉式单例
public static OkHttpUtils instance;
public static OkHttpUtils getInstance(){
if(instance==null){
synchronized (OkHttpUtils.class){
instance = new OkHttpUtils();
}
}
return instance;
}
/**
* 完成构造方法 okHttpClient
*/
public OkHttpUtils(){
//日志拦截
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
//设置一个等级
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
/**
* 使用构造者模式
* 设置连接超时
* 读取超时
* 写超时
* 添加拦截事件
*/
mClient = new OkHttpClient.Builder()
.connectTimeout(10,TimeUnit.SECONDS)
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
//添加拦截器
.addInterceptor(interceptor)
.build();
}
/**
* 创建异步post方法
* * 创建表单FormBody
* * 把我们取出的key和value对应的放进去
* * 最后,build表单,生成RequestBody
* @param path
* @param params
* @param clazz
* @param okCallBack
*/
public void postEnqueue(String path, Map<String,String> params, final Class clazz, final OkCallBack okCallBack){
FormBody.Builder builder = new FormBody.Builder();
//遍历取出mao集合中的值
for (Map.Entry<String,String> entry:params.entrySet()){
builder.add(entry.getKey(),entry.getValue());
}
FormBody body = builder.build();
Request request = new Request.Builder()
.post(body)
.url(path)
.build();
Call call = mClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
okCallBack.failed(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
Gson gson = new Gson();
final Object o = gson.fromJson(result, clazz);
handler.post(new Runnable() {
@Override
public void run() {
okCallBack.success(o);
}
});
}
});
}
}