java - 在异步任务中更新 UI 线程

标签 java android multithreading android-asynctask

如标题所述,我正在尝试在运行 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);

显然是声明的

  1. 在方法之外 - 这将导致 tvnull
  2. 在不属于 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/

相关文章:

java - 如何检查 Dalvik 缓存是否被修改

java - 正则表达式 - 将所有匹配项作为单个匹配项返回

java - JVM 在尝试获取信号量时卡住

multithreading - 资源池死锁

Java MySQL 防止竞争条件

eclipse - Ant &lt;input/> 不再在 Eclipse Helios 中工作 (3.6)

java - Java 中存在问题的decimalFormat.parse()

android - 如何修复这个错误? E/RecyclerView : Cannot scroll to position a LayoutManager set. 使用非空调用 setLayoutManager

java - 为一种方法设置多个监听器

android - 我怎样才能在图片库中获得真实路径?