用AsyncTask实现OKHttp的回调

用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() {
                //失败后的操作
            }
        });
    }
发布了43 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/include_IT_dog/article/details/99710956
今日推荐