【发布时间】:2014-03-07 09:10:21
【问题描述】:
我有以下代码:
这里是 asyncHttp 文档的链接: Link
这就是所谓的登录任务:
mAuthTask = new UserLoginTask();
mAuthTask.execute((Void) null);
这是android模板活动提供的异步任务:
public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
// TODO: attempt authentication against a network service.
Network.login(mEmail, mPassword, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
if (statusCode == 200) {
// Successfully got a response
for (int i = 0; i < headers.length; i++) {
if (headers[i].getName().equalsIgnoreCase("token")) {
// Set the token to the received value
Network.SetToken(headers[i].getValue());
// >>>>>>> return true; <<<<<<<<<
}
}
}
// >>>>> return false <<<<<<<<<<<<
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
// Response failed :(
// >>>>>>>>>>>>>>>>>> return false <<<<<<<<<<<<<
}
});
// TODO: register the new account here.
return true;
}
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
finish();
} else {
mPasswordView
.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
如何从我的 AsyncHttpResponseHandler 中返回 true 或 false,然后将该值返回给异步任务?这样它就可以成功执行其 on post 方法。
我只能想到设置变量然后阻止它。但是那失败主义者认为它是异步的,我宁愿远离它。
【问题讨论】:
-
问题出在哪里?
-
Network.login不是已经与AsyncHttpResponseHandler异步了吗? -
@super-qua 是的。但我不认为它的成功方法会在用户线程上运行吗?因为我必须在我的回调中更新 UI,并且不允许你从工作线程更新 ui。
-
activity.runOnUiThread(new Runnable() { @Override public void run() { 改变你的 UI } } );
-
你可以按照@anthone 提到的方式解决它
标签: java android android-asynctask callback