1

の更新に問題がTextViewあります。Handler メソッドを使用してメッセージを UI に渡しました。私のアプリケーションは data(type integers) true io stream を受け取り、 に表示されTextViewます。

私の Activity クラスは次のようになります。

public class DeviceView extends Activity {
    TextView dataX;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.device_view);

        dataX = (TextView) findViewById(R.id.datax);

        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                dataX.setText(String.valueOf(msg.arg1));
            }
        };

    }
}

スレッドを拡張する別のクラスもあります。

public class IOThread extends Thread {

    public void run() {
        byte[] buffer = new byte[1024];
        int data;
        while (true) {
            try {
                data = in.read(buffer);
                Message message= Message.obtain();
                message.arg1= data;
                DeviceView.handler.sendMessage(message);
            } catch (IOException ex) {
                break;
            }
        }
    }
}

別の変数型を作成し、Stringそれを変数データにポイントし、最後にカウントを呼び出す必要がありますか? それは更新するのに十分でしょうTextViewか?

4

2 に答える 2

0

Handler の問題ではない問題が見つかりました。最初に投稿したコードは正しいです。問題は、受信した bytes[] 配列を InputStream から読み取る方法にあります。私は整数int numbers = (int) 2を送信してテストしましたが、この受信データを Android アプリの端末に出力すると、int 3 または 4 を送信しても 1 しか受信しません。

だから私はあなたのサンプルコード @dcanh121 を高く評価しましたが、私の質問は実際にサーバーが送信する整数を正しく読み取るにはどうすればよいですか?

public void run() {
byte[] buffer = new byte[1024];
int data;

while (true) {
    try {

        data = in.read(buffer);
                Log.d(TAG + data, "test");
        Message message = Message.obtain();
        message.arg1 = data;                
        Log.d(TAG + message.arg1, "test");
        DeviceView.handler.sendMessageDelayed(message, 100);

        } catch (IOException ex) {
        Log.e(TAG_IOThread, "disconnected", ex);
        break;
        }
    }
}
于 2012-07-27T22:32:30.623 に答える
0

インターフェイスを使用してみてください。アクティビティに実装させ、IOThread クラスに渡します。結果を取得したら、その結果を Activity に渡します。

InterfaceData という名前のインターフェイス

public void getData(int データ);

public class DeviceView extends Activity implements InterfaceData{

        TextView dataX;
        Handler handler;
        IOThread ioThread;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.device_view);
            handler = new Handler();
            ioThread = new IOThread(this);
            dataX = (TextView) findViewById(R.id.datax);

        }

        @Override
        public void getData(int data){
           handler.postDelayed(new Runnable(){
           public void run(){
             dataX.setText(data);
            };
          },100);
        }

    }


> Thread class


    public class IOThread extends Thread {

       InterfaceData interfaceData;
       public IOThread(InterfaceData interfaceData){
         this.interfaceData = interfaceData;
       }

        public void run() {
            byte[] buffer = new byte[1024];
            int data;
            while (true) {
                try {
                    data = in.read(buffer);
                   interfaceData.getData(data);
                } catch (IOException ex) {
                    break;
                }
            }
        }
    }
于 2012-07-25T23:42:42.763 に答える