我想在一个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
}
}
但我不确定我能不能这样做。谢谢你的任何建议。
答案 0 :(得分:0)
如果您已经使用AsyncHttp库,则可能不一定需要使用AsyncTask。我在过去的两个项目中做的是从ResponceHandler类扩展并使用回调初始化它。你可以从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
}
});
}
希望有所帮助。