Achieve OKHttp with AsyncTask callback
In many cases, we need to use the network upon request appropriate action at the request of success or failure, how to coordinate the network request thread and UI thread, is the key to achieving callback
OKHttpRequest
Callback after this class inherits AsyncTask class that implements a background network request, the success or failure
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
Callback method
public interface OkHttpRequestHelper {
void success(String jsonString);
void failed();
}
actual use
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() {
//失败后的操作
}
});
}