将输出从Bufferedreader打印到TextView

时间:2018-01-16 14:09:12

标签: java android textview bufferedreader

我目前正在编写一个应用程序,该应用程序可以作为控制台接收和发送消息到我的套接字服务器。

我想将服务器发送给我的消息输出到textview。

我的问题是我在更改textview时遇到以下异常

W/System.err: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

我的代码:

public class SocketListener implements Runnable {

public static BufferedReader r;



public void run() {

    try {
        MainActivity.ausgabe.setText("Reading socket");

        String message;
        Boolean run = true;
        while (run) {
            if(r != null) {
                MainActivity.ausgabe.setText("Reading line");
                message = r.readLine();
                MainActivity.ausgabe.setText("Line read");
                if(message != null){
                    MainActivity.ausgabe.setText(message);
                }

            }
        }


    } catch (Exception e) {
        e.printStackTrace();

    }
}

}

据我测试,问题出在这一行:

 message = r.readLine();

因为在此行之前更改textview工作perfekt,但此行不起作用(它打印“读取行”但在打印“行读取”时遇到错误)

我希望你能帮助我,因为我无法在互联网上找到任何东西

亡灵

1 个答案:

答案 0 :(得分:1)

在实施ThreadActivity之间的互动时,您应该使用Handlerinfo)或runOnUiThreadinfo)。

我认为错误抛出会以某种方式延迟(因为多线程),因此您在视图实际更改后会看到它。可能还有另一个线程检查正确的视图操作并在发现验证时抛出此错误(我无法在Android文档中找到确切的信息)。