首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LoopJ AndroidAsyncHttp -更多任务

LoopJ AndroidAsyncHttp -更多任务
EN

Stack Overflow用户
提问于 2014-05-24 20:26:19
回答 1查看 402关注 0票数 1

我想在一个活动中使用AsyncHttpClient完成更多任务(我需要通过REST从不同的网址获取和更新数据)。但我不知道该怎么处理。我的想法如下:

代码语言:javascript
复制
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
    }
}

但我不确定我能不能这样做。谢谢你的建议。

EN

回答 1

Stack Overflow用户

发布于 2014-05-24 21:03:16

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

代码语言:javascript
复制
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) {...}
}

在activity中,我实现了接口,并做了如下操作:

代码语言:javascript
复制
    @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
                    }
                });
            }

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23845000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档