0

これは私の Android の Websocket クライアントです。これは簡単なテストであり、サーバーからの応答が に表示されるはずTextViewです。

Boolean status1 = false;
static String msg = "reply ";   


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    java.lang.System.setProperty("java.net.preferIPv6Addresses", "false");
    java.lang.System.setProperty("java.net.preferIPv4Stack", "true");

    final TextView text = (TextView) findViewById(R.id.textView1);
    final TextView text1 = (TextView) findViewById(R.id.textView2);
    final Button button = (Button) findViewById(R.id.button1);


    try {
        final WebSocketClient client = new WebSocketClient(new URI(
                "ws://10.0.2.2:8080/_024_WebSocketTest4/echo")) {

            @Override
            public void onOpen(ServerHandshake handshakedata) {
                Log.d("1", "open");
                status1 = true;

            }

            @Override
            public void onMessage(String message) {

                msg += message;
                Log.d("reply", message);

                print(text1);

            }

            @Override
            public void onError(Exception ex) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onClose(int code, String reason, boolean remote) {
                status1 = false;

            }
        };

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                connect(client);


            }
        });




    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}


public void connect(WebSocketClient client) {

    final TextView text = (TextView) findViewById(R.id.textView1);
    client.connect();

    while (!status1) {

    }

    text.setText(client.getReadyState().toString());
    client.send("Hello");
    //final TextView text1 = (TextView) findViewById(R.id.textView2);

    //text1.setText(msg);
}

public void print(TextView text1) {

    Log.d("print", msg);
    text1.setText(msg);
}

サーバーがメッセージを送信すると、テキストビューに表示されません。しかし、Logcat では返信が表示されます。何が問題なのですか?

4

2 に答える 2

0

おそらく、メイン スレッドから TextView を更新する必要があります。

の線に沿った何か..

Handler mHandler = new Handler(); 
// ...
// onMessage:
mHandler.post(new Runnable() {
    public void run() {
        //.. update UI
    }
};
于 2015-02-27T04:40:39.407 に答える