//导入依赖
//okhttp
implementation "com.squareup.okhttp3:okhttp:3.12.0"
在M层中
//方法requestLoginDataByUtil(参数,callback);
//创建OKHttpUtil的封装类
public class OKHttpUtil {
//3、提供一个本地OKHttpUtil引用
private static OKHttpUtil okHttpUtil;
private final OkHttpClient okHttpClient;
//单例模式
//1、私有化构造函数
//作用:不能被其他外部内容访问
private OKHttpUtil() {
//创建OKHttp对象
okHttpClient = new OkHttpClient.Builder()
.build();
}
//2、提供公有方法供外部类访问
public static OKHttpUtil getInstance() {
//DCL模式的懒汉式
if (null == okHttpUtil) {
synchronized (OKHttpUtil.class) {
if (null == okHttpUtil) {
okHttpUtil = new OKHttpUtil();
}
}
}
return okHttpUtil;
}
//post请求方法
public void post(RequestBody requestBody,String urlString,Callback callback) {
//①在这里首先需要请求体,但是需要具体类进行提供,所以把RequestBody作为参数进行传入
//②然后需要请求地址参数,也需要具体类进行提供,所以也把URL作为参数进行传入
Request request = new Request.Builder()
.method("POST", requestBody)
.url(urlString)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
//get请求方法
public void get(String urlString,Callback callback){
//所需的参数是URL地址
Request request = new Request.Builder()
.url(urlString)
.build();
okHttpClient.newCall(request).enqueue(callback);
}
}
//回到M层中
private void requestLoginDataByUtil(参数 final CallBack callback) {
//1、所需参数一:请求体
FormBody formBody = new FormBody.Builder().build();
//2、所需参数二:请求地址(地址接口的拼接 不需要拼接的就不用写)
String urlString = Constant.LOGIN_URL + "?phone=" + userName + "&pwd=" + password;
//3、所需参数三:Callback,这里是OKHttp的内容回调
OKHttpUtil.getInstance().post(formBody, urlString, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//M层的接口回调
callback.responseData(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String repsoneData = response.body().string();
//M层的接口回调
callback.responseData(repsoneData);
}
});
}
//回传到主页面展示时必须写到showDate中的
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(LoginActivity.this,responseData,Toast.LENGTH_SHORT).show();
}
});