私のアプリケーションでは、Bluetooth 経由でいくつかの文字列を受信し、ハンドラーを使用してそれらを UI スレッドに戻したいと考えています。Handler オブジェクトを使用して、データをメイン UI スレッドに戻しました。
mHandler.obtainMessage(MainActivity.MESSAGE_READ, length, 0, a).sendToTarget();
注意: aは、Bluetooth InputStream から取得したバイト配列です。
私のUIスレッドには、次のものがありました。
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
byte[] b = (byte[]) msg.obj;
String str = new String(b, 0, msg.arg1);
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
Log.i(TAG, "mHander: " + str);
}
}
たとえば、単純な文字列「cfm123245」を他の Bluetooth デバイス (マイクロ コントローラーによって制御される Bluetooth モジュール) から Android フォンに送信すると、Toast は正確に「cfm12345」を画面に表示します。しかし、Logcat では、次の醜い文字列が表示されます。
MainActivity mHander: cfm��������
Toast と Logcat で 1 つの String オブジェクトの表示が異なる理由はわかりません。そして、その文字列をさらに処理するためにその文字列を取得すると、醜いcfm��������
ものを取得したように見えます。だから間違ったデータです。
なぜこれが起こるのか、誰かが私に説明できますか? これを修正する方法は?それについて私を助けてください。
前もって感謝します!