这是一个Android应用程序的prat,这个应用程序想要与其他Android设备连接。
我想在TextView上显示我从服务器收到的消息。
但是这一行中有错误tv.setText(message);
有错误:
java.lang.NullPointerException
FATAL EXCEPTION: Thread-10
请帮我在TextView中显示消息,谢谢。
类ReadMes扩展了线程{
private Socket socket;
private TextView tv;
public ReadMes(Socket socket, TextView tv){
this.socket = socket;
this.tv = tv;
}
@Override
public void run() {
BufferedReader reader = null;
try{
reader = new BufferedReader( new InputStreamReader(socket .getInputStream()));
String message = null;
while( true){
message = reader.readLine();
tv.setText(message);
}
} catch(IOException e){
e.printStackTrace();
} finally{
if( reader!= null){
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
答案 0 :(得分:0)
您无法从后台线程修改屏幕上的任何内容。
您需要使用Handler从后台线程与UI Thread进行通信,并让处理程序为您更改TextView,或者您可以使用AsyncTask将Thread / Handler交互抽象为“更易于使用”封装
答案 1 :(得分:0)
尝试使用
runOnUiThread(new Runnable() {
public void run() {
tv.setText(message);
}
}).start();
而不是
tv.setText(message);
答案 2 :(得分:0)
当您尝试从工作线程更新textView但"do not access the Android UI toolkit from outside the UI thread"
http://developer.android.com/guide/components/processes-and-threads.html
要解决此问题,Android提供了几种从其他线程访问UI线程的方法。以下列出了可以提供帮助的方法:
因此请使用它,即将此行tv.setText(message);
放在runOnUiThread
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(message);
}
});
或者
tv.post(new Runnable() {
public void run() {
tv.setText(message);
}
});
希望这对你有所帮助。