Achieve OKHttp with AsyncTask callback

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() {
                //失败后的操作
            }
        });
    }
Published 43 original articles · won praise 16 · views 10000 +

Guess you like

Origin blog.csdn.net/include_IT_dog/article/details/99710956