我有一些使用地理编码器获取地址的工作线程,当它完成后,我想在应用程序线程的TextView上显示结果,使用来自工作线程的setText()导致异常,那么什么是这样做的最佳做法是什么?
答案 0 :(得分:1)
在您要设置文本的线程中尝试此操作:
// you should finalize your text before using it in another thread,
// else the IDE would show an error
final String text = yourTextToBeSet;
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(text);
}
});
在非UI线程上调用setText()时获得的异常是因为当您在非UI线程上时无法调用与UI相关的任何内容。如上所述,您可以轻松调用runOnUiThread(Runnable)来转移UI线程上的代码执行。
请注意,如果您的代码不那么简单,那么这个解决方案就不够了,在这种情况下,建议使用AsyncTask。
答案 1 :(得分:1)
不得从外部线程触及Android UI视图。任何调用Views on Views的代码都必须仅在UI线程中运行。你应该使用AsyncTask。它提供了有用的回调方法,可以在单独的线程中运行任务来更新UI。
答案 2 :(得分:1)
如果没有看到您的代码或知道什么是异常,很难说:
但请检查: