Java 线程通知器 - android

标签 java android multithreading http

我在 android 编程方面遇到了一个小问题。基本上我想要实现的是调用 REST Web 服务并在我的(现有) Activity 上显示结果。

Android 有一定的局限性,因此 Activity 上的每个 View 都必须由最初创建它的同一个线程进行编辑。

每个 http 调用必须在单独的线程中。因此,由于我主要不是 Java 开发人员(我做过 QT),所以我做了最合乎逻辑的事情。

  • 创建了单独的线程来调用我的网络服务。
  • 将主线程注册为监听器。
  • 将我的工作结果通知主线程。

但是当我尝试在我的监听器方法中使用该结果来更改 View 时,我的应用程序崩溃并抛出此异常

  • 07-15 14:40:08.569:E/AndroidRuntime(12204):致命异常:Thread-31307
  • 07-15 14:40:08.569: E/AndroidRuntime(12204): android.view.ViewRootImpl$CalledFromWrongThreadException: 只有创建 View 层次结构的原始线程才能触及它的 View 。

我在监听器中做的是这个

@Override
public void workDone(WorkerThread thread)
{
   int a = (int)thread.getResult();
   ((ImageView)root.findViewByid(ID).setImageResource(a);
}

最佳答案

看看AsyncTask ,它允许您在后台线程中执行工作,然后将结果返回到主线程。

另一种选择是使用 Activity.runOnUiThread回调主线程。

关于Java 线程通知器 - android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24758596/

相关文章:

java迷宫游戏错误仅朝一个方向进行,使用数组

android - 来自带有链接结束文本的字符串的可点击链接

Python 以线程安全的方式在本地抑制警告

java - Threadpoolexecutor 不更新并发 HashMap

java - 从线程中干净地退出。

java - 线程安全静态 map 的延迟加载

Java - 重写从外部类继承泛型的内部类时出现 'Name clash' 和 'constructor undefined' 错误

java - 在游戏中使用 'Number' 类而不是原语?

安卓相机打不开

java - 如何制作独立于应用程序本身运行的闹钟