我在AsyncTask中获取所需数据后刷新TextView时遇到问题。如果它是单个文件,一切都会好的,但我决定拆分它。在第一类我有TextViews,在另一个我有几个AsyncTasks从网上下载数据。 我已经尝试过了:
mainActivity:
summary.countCash(); // it runs AsyncTask in summary class
while (summary.wait) {
// do nothing and wait until AsyncTask finishes
}
eCash.setText("Cash: " + summary.cash);
并在AsyncTask中:
Boolean wait = false;
@Override
protected void onPreExecute() {
wait = true;
}
@Override
protected void onPostExecute(Integer result) {
cash = result;
wait = false;
}
不幸的是它不起作用。应用程序冻结。 我也试着设置
wait = false;
在doInBackground的末尾,但是在main中我得到了summary.cash = 0,这可能是因为它在onPostExecute中更新值之前刷新了TextView。
答案 0 :(得分:1)
在您的异步任务中。
@Override
protected void onPostExecute(Integer result) {
eCash.setText("Cash: " + result);
}
摆脱你的while语句。你不需要它。 Fyi,你是通过等待锁定ui线程,首先打败了asynctask的目的。
希望这有帮助
答案 1 :(得分:0)
AsyncTask
类中的
private _mainActivity;
// constructor
public AsyncTask(MainActivity ma) {
// passing reference
_mainActivity = ma;
}
@Override
protected void onPostExecute(Integer result) {
_mainActivity.updateTextview(result);
}
然后在MainActivity
public void updateTextview(Integer result) {
// update textview using result
}
这样,您的MainActivity就不会陷入循环中。此外,您可以在主活动中添加流程对话框,并在updateTextview
方法中将其停止。
您可以使用AsyncTask类作为对象来调用它。我不知道班级名称,假设它是AsyncTask
,然后使用MainActivity
中的下一个
AsyncTask at = new AsyncTask(this);
at.execute();
this
指向MainActivity本身,它将作为参考。然后,AsyncTask
类可以使用该引用来调用updateTextview()
方法的回调方法。