用AsyncTask实现OKHttp的回调
很多时候,我们在使用网络请求后需要根据请求成功或者失败进行相应的操作,如何协调网络请求线程与UI线程,就是实现回调的关键
OKHttpRequest
这个类继承AsyncTask类,实现后台发送网络请求,成功或失败后进行回调
public class OkHttpRequest extends AsyncTask {
private static OkHttpClient okHttpClient = new OkHttpClient();
private OkHttpRequestHelper okHttpRequestHelper;
private String jsonString;
private boolean ifSuccess;
public OkHttpRequest(Request request ,OkHttpRequestHelper okHttpRequestHelper){
this.okHttpRequestHelper = okHttpRequestHelper;
execute(request);
}
@Override
protected Object doInBackground(Object[] objects) {
//在后台发送请求,判断是否成功,获取结果的json
if (objects.length!=0 && objects[0] instanceof Request){
try {
Response response = okHttpClient.newCall((Request)objects[0]).execute();
if (response.isSuccessful()) {
ifSuccess = true;
jsonString = response.body().string();
response.body().close();
}
else ifSuccess = false;
}catch (IOException ie){
ie.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Object o) {
//根据结果进行回调
super.onPostExecute(o);
if (ifSuccess){
okHttpRequestHelper.success(jsonString);
}else okHttpRequestHelper.failed();
}
}
OKHttpRequestHelper
回调方法
public interface OkHttpRequestHelper {
void success(String jsonString);
void failed();
}
实际使用
public void login(){
if (!validate()){
return;
}
final String email = emailET.getText().toString();
final String password = pwdET.getText().toString();
Request request = new Request.Builder().url(OkHttpRequest.LOGIN+"?email="+email+"&password="+password).build();
new OkHttpRequest(request,new OkHttpRequestHelper() {
@Override
public void success(String jsonString) {
//登陆成功后的操作
}
@Override
public void failed() {
//失败后的操作
}
});
}