1

我想在一个 Activity 中使用 AsyncHttpClient 来完成更多任务(我需要通过 REST 从不同的 URL 获取和更新数据)。但我不确定如何处理这个问题。我的想法如下:

private class Synchronize extends AsyncTask<String, String, Boolean> {

    @Override
    protected void onPreExecute() {
        prgDialog.show();
    }

    protected Boolean doInBackground(String... params) {
        url = "http://someurl";
        AsyncHttpClient client = new AsyncHttpClient();
            client.post(getApplicationContext(), url, entity, "application/json", new AsyncHttpResponseHandler() {
                @Override
                public void onSuccess(String content) {
                    // do something
                }

                @Override
                public void onFailure(int code, Throwable error, String content) {
                    // do something
                }

            }); 

        url = "http//otherurl";
        client.get(url, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(String response) {
                // do something
            }

            @Override
            public void onFailure(int code, Throwable error, String content) {
                // do something
            }
        });

        return true;
    }

    @Override
    protected void onPostExecute(Boolean b) {
        super.onPostExecute(b);
        prgDialog.dismiss();
        // refresh view
    }
}

但我不确定我是否可以这样做。感谢您的任何建议。

4

1 回答 1

0

If you already use AsyncHttp library you probably don't necessarily need use AsyncTask. What I did in my past two projects are extend from ResponceHandler class and init it with callback. You can make all request from ui thread if they not depend of each other and process in callbacks ui stuff or make next from callback but it should be synchronized. Here some example:

public class TrainersJsonHandler extends BaseJsonHttpResponseHandler {

    private OnGetTrainers mCallback;

    private Context mContext;

    private ObjectMapper mMapper;

    public TrainersJsonHandler(OnGetTrainers callback, Context context,
            ObjectMapper mapper) {
        mCallback = callback;
        mContext = context;
        mMapper = mapper;
    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, String rawResponse,
            Object response) {
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, Throwable e, String rawData,
            Object errorResponse) {
        RestUtil.processFail(statusCode, headers, e, mContext, mCallback);
    }

    @Override
    protected Object parseResponse(String responseBody) throws JSONException {
        List<Trainer> result = parseTrainers(responseBody);
        if (result != null && mCallback != null) {
            mCallback.onFinishGetTrainers(result);
        }
        return null;
    }


    public List<Trainer> parseTrainers(String responseBody) {...}
}

and in activity I implemented interface and did something like this:

    @Override
            public void onFinishGetTrainers(final List<Trainer> trainers) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //do ui staff
                       //you can make here new request or refresh counter but should be synchronize
                    }
                });
            }

Hope it help.

于 2014-05-24T13:03:16.133 回答