0

間違ったスレッドエラーが発生しているので、UIスレッドからinvalidateを実行する必要があると考えています。通常、私は次のようなものを持っています:

public void run() {

                runOnUiThread(new Runnable() {
}});

ただし、メソッドから参照するには、このランナブルに名前を付ける必要があります。runOnUiThreadをこれに組み込むにはどうすればよいですか?

Handler viewHandler = new Handler();
Runnable updateView = new Runnable() {
@Override

public void run() {

    mEmulatorView.invalidate();

    if (statusBool == true) {
        for (int i = 1; i < dataReceived.length() - 1; i++) {

            if (dataReceived.charAt(i) == '>') {

                Log.d(TAG, "found >");
                deviceStatus = 0;
            }
            if (dataReceived.charAt(i) == '#'
                    && dataReceived.charAt(i - 1) != ')') {

                Log.d(TAG, "found #");
                deviceStatus = 1;
            }
            if ((i + 1) <= (dataReceived.length())
                    && dataReceived.charAt(i) == ')'
                    && dataReceived.charAt(i + 1) == '#') {

                Log.d(TAG, "found config )#");
                deviceStatus = 2;
            }

        }
        statusBool = false;
        viewHandler.postDelayed(updateView, 1000);

    }
}
};

それを呼び出す:

public void onDataReceived(int id, byte[] data) {

        dataReceived = new String(data);
        ((MyBAIsWrapper) bis).renew(data);
        mSession.write(dataReceived);
        viewHandler.post(updateView);
}
4

2 に答える 2

1

名前を付ける必要はありません。自分自身を投稿したい場合は、thisキーワードを使用できます。

viewHandler.postDelayed(this, 1000);

アップデート

によって引き起こされる間違ったスレッドエラーmSession.write(dataReceived);updateView問題は発生しません。runnableにラップmSession.writeして、UIスレッドで呼び出すようにしてください。

于 2013-01-18T11:21:24.423 に答える
1

うまくいったので、UIスレッドでその書き込み行を実行する必要がありましたが、それはそうだと思っていましたか?!

public void onDataReceived(int id, byte[] data) {

        dataReceived = new String(data);
        ((MyBAIsWrapper) bis).renew(data);

        runOnUiThread(new Runnable(){
            @Override
            public void run() { 
                mSession.write(dataReceived);       
            }});

        viewHandler.post(updateView);
    }
于 2013-01-18T12:12:03.173 に答える