0

これは Android アプリの一部であり、このアプリは他の Android デバイスと接続する必要があります。サーバーから受け取ったTextViewにメッセージを表示したい。しかし、この行にはエラーがあり、tv.setText(message);

エラーがあります:

java.lang.NullPointerException
FATAL EXCEPTION: Thread-10

TextView にメッセージを表示するのを手伝ってください、ありがとう。

class ReadMes extends Thread{

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();
            }
        }
    }
}

}

4

3 に答える 3

0

使ってみて

runOnUiThread(new Runnable() {
    public void run() {
        tv.setText(message);
    }
}).start();

それ以外の

tv.setText(message);
于 2013-10-29T19:52:46.233 に答える
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 スレッドにアクセスする方法がいくつか用意されています。役立つメソッドのリストを次に示します。

  1. Activity.runOnUiThread(実行可能)
  2. View.post(実行可能)
  3. View.postDelayed(実行可能、長い)

したがって、次のように使用します。つまり、この行tv.setText(message);runOnUiThread

runOnUiThread(new Runnable() {

            @Override
            public void run() {
            tv.setText(message);    
            }
        });

または

           tv.post(new Runnable() {
                public void run() {
                    tv.setText(message);    
                }
            });

これがお役に立てば幸いです。

于 2013-10-29T20:04:05.553 に答える