我在 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/