将 Bufferedreader 的输出打印到 TextView
Printing the output from a Bufferedreader to a 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 是完美的,但在这一行之后不起作用(打印 "reading line" 但在打印 "line read" 时遇到错误)
我希望你能帮助我,因为我在互联网上找不到任何东西
亡灵
在 Thread
和 Activity
之间实现交互时,您应该使用 Handler
(info) or runOnUiThread
(info)。
我认为错误抛出在某种程度上被延迟了(因为多线程)所以你在视图实际改变后才看到它。可能有另一个线程检查正确的视图操作并在发现验证时抛出此错误(我无法在 Android 文档中找到确切信息)。
我目前正在编写一个应用程序,该应用程序主要用作接收消息和向我的套接字服务器发送消息的控制台。
我想将服务器发送给我的消息输出到文本视图。
我的问题是在更改文本视图时出现以下异常
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 是完美的,但在这一行之后不起作用(打印 "reading line" 但在打印 "line read" 时遇到错误)
我希望你能帮助我,因为我在互联网上找不到任何东西
亡灵
在 Thread
和 Activity
之间实现交互时,您应该使用 Handler
(info) or runOnUiThread
(info)。
我认为错误抛出在某种程度上被延迟了(因为多线程)所以你在视图实际改变后才看到它。可能有另一个线程检查正确的视图操作并在发现验证时抛出此错误(我无法在 Android 文档中找到确切信息)。