如标题所述,我正在尝试在运行 asynctask 时更新我的 UI 线程中的某些内容。我已经阅读了很多关于 asynctask 的内容,看来我应该能够更改 来自 onPostExecute() 方法的变量。显然情况并非如此。
这是我的示例代码:
TextView tv = (TextView) findViewById(R.id.thingsThatNeedToBeUpdated);
Login login = new Login();
login.execute(userName, password);
这里是登录类
public class Login extends AsyncTask<String, void, String>{
public String doInBackground(String... params){
logMeIn(params[0], params[1]);
}
public void onPostExecute(String update){
tv.setText(result); //this is not working!!
}
实际发生的事情是 tv 带有红色下划线并且 eclipse 说我需要创建一个局部变量.. 但我认为 onPostExecute 是从 UI 线程运行的?困惑:?
我正在尝试做我在 this 发现的事情网站。我不完全确定我在做什么,我希望在正确的方向上有一点!提前致谢。
最佳答案
这行在这里
TextView tv = (TextView) findViewById(R.id.thingsThatNeedToBeUpdated);
显然是声明的
- 在方法之外 - 这将导致
tv
为null
或 - 在不属于
AsyncTask
的方法中 - 这意味着 任务无权访问它
您应该将其定义为成员变量(在方法之外)
TextView tv;
然后在一个方法中初始化它
tv = (TextView) findViewById(R.id.thingsThatNeedToBeUpdated);
这将使您的任务以及您类的其他人都能访问它。
如果您的 AsyncTask
是一个与您的 Activity
不同的文件,那么您需要 see this answer关于使用 interface
并创建回调以更新 Activity
中的 TextView
。
关于java - 在异步任务中更新 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257910/