Java 如何处理观察者中的数据输出?

Java 如何处理观察者中的数据输出?,java,android,exception,multithreading,observer-pattern,Java,Android,Exception,Multithreading,Observer Pattern,我有一个可观察的和一个观察者。observable确实在后台线程中下载了一些东西,并调用notifyObservers让观察者读取状态 在public void update中的某个时刻,观察者尝试更新GUI ((TextView)findViewById('R.id.foo')).setText("bar"); 但可观察线程似乎调用了此方法,因为可观察线程(!!!)抛出了以下内容: android.view.ViewRoot$CalledFromWrongThreadException:

我有一个
可观察的
和一个
观察者
。observable确实在后台线程中下载了一些东西,并调用
notifyObservers
让观察者读取状态

public void update
中的某个时刻,观察者尝试更新GUI

((TextView)findViewById('R.id.foo')).setText("bar");
但可观察线程似乎调用了此方法,因为可观察线程(!!!)抛出了以下内容:

 android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
 at android.view.ViewRoot.checkThread(ViewRoot.java:2462)
 at android.view.ViewRoot.requestLayout(ViewRoot.java:512)
 ...
 at com.mynamespace.acitivty.TrackActivity.startPlay(TrackActivity.java:72)
 at com.mynamespace.acitivty.TrackActivity.update(TrackActivity.java:107)
 at java.util.Observable.notifyObservers(Observable.java:147)
 at java.util.Observable.notifyObservers(Observable.java:128)
 at com.mynamespace.module.communication.Download.stateChanged(Download.java:213)
 at com.mynamespace.module.communication.Download.run(Download.java:186)
 at java.lang.Thread.run(Thread.java:1058)

有什么方法可以防止这种情况发生吗?我确信我在这里遗漏了一些明显的东西。

我认为您的问题与此类似:

正如bhatt4982回答的那样,您可以使用。从其文件:

“处理程序有两种主要用途:(1)将消息和可运行程序安排为将来某个时间点执行;(2)将要在不同线程上执行的操作排队。”


AshtonBRSC的回答也很好,您可以将您的UI更新包含在一个Runnable中,并使用活动的方法。

我认为您的问题与此类似:

正如bhatt4982回答的那样,您可以使用。从其文件:

“处理程序有两种主要用途:(1)将消息和可运行程序安排为将来某个时间点执行;(2)将要在不同线程上执行的操作排队。”

AshtonBRSC给出的答案也很好,您可以将UI更新封装在可运行文件中,并使用活动的方法