【问题标题】:LoopJ AndroidAsyncHttp – more tasksLoopJ AndroidAsyncHttp – 更多任务
【发布时间】:2014-05-24 12:26:19
【问题描述】:

我想在一个 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
    }
}

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

【问题讨论】:

  • AsyncHttpClient 的重点是避免使用 AsyncTask。

标签: android rest android-async-http


【解决方案1】:

如果您已经使用 AsyncHttp 库,您可能不一定需要使用 AsyncTask。我在过去的两个项目中所做的是从 ResponceHandler 类扩展并使用回调初始化它。您可以从 ui 线程发出所有请求,如果它们不相互依赖并在回调 ui 中处理或从回调中进行下一步,但它应该是同步的。这里有一些例子:

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) {...}
}

在活动中我实现了接口并做了这样的事情:

    @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
                    }
                });
            }

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 2012-12-25
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    相关资源
    最近更新 更多