Android TextView在Nexus 7上附加SpannableString强制java.lang.RuntimeException

时间:2013-05-13 17:53:39

标签: android textview append runtimeexception nexus-7

我遇到一个严重的问题,导致我的应用崩溃。

我正在将应用中的一些文本加载到TextView中。本文的某些部分是可点击的,应该调用另一个活动 - 这适用于大多数设备。 不幸的是,它无法在Nexus 7设备上运行,我真的不知道为什么。

这是我从Google获得的堆栈跟踪:

  

java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序   在android.os.Handler。(Handler.java:197)   在android.os.Handler。(Handler.java:111)   在android.widget.Editor $ UserDictionaryListener。(Editor.java:3836)   在android.widget.Editor。(Editor.java:192)   在android.widget.TextView.createEditorIfNeeded(TextView.java:8475)   在android.widget.TextView.setText(TextView.java:3611)   在android.widget.TextView.setText(TextView.java:3554)   在android.widget.TextView.append(TextView.java:3277)   在android.widget.TextView.append(TextView.java:3267)   [...一些app方法但与此问题无关...]

java代码:

final String text = displayedText;
SpannableString link = makeLinkSpan(displayedText, new View.OnClickListener() {          
    @Override
    public void onClick(View v) {
        //call the activiy
    }
});

textView.append(link);

stacktrace告诉我调用Looper.prepare(),但我不知道在哪里...... 我在AsyncTask中加载一些数据。布局在doInBackground方法中膨胀,textView只是它的一个子元素。我没有看到为什么这个问题只影响我的Nexus 7用户而不影响我的设备。即使是带有Nexus 7预设的仿真器也可以正常工作

任何想法如何解决这个问题? :d

1 个答案:

答案 0 :(得分:2)

您需要在主线程上扩充布局。你可以这样做 - >

runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // TODO Inflate layout & set textview's text here

        }
    });