0

在我的应用程序中,我想通过蓝牙接收一些字符串,然后使用处理程序将它们传递回我的 UI 线程。我使用 Handler 对象将数据传回主 UI 线程:

mHandler.obtainMessage(MainActivity.MESSAGE_READ, length, 0, a).sendToTarget();

注意:a是我从蓝牙 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);
                }
}

例如,如果我从我的其他蓝牙设备(它是一个由微控制器控制的蓝牙模块)向我的 Android 手机发送一个简单的字符串“cfm123245”,则 Toast 将在屏幕上准确显示“cfm12345”。但是在 Logcat 中,我看到了这个丑陋的字符串:

MainActivity         mHander: cfm��������

我不知道为什么 Toast 和 Logcat 之间的一个 String 对象看起来不同。如果我让那个字符串对它做一些进一步的处理方法,我似乎得到了一个丑陋的字符串cfm��������。所以是错误的数据。

谁能向我解释为什么会这样?如何解决这个问题?请帮助我。

提前致谢!

4

2 回答 2

0

mHandler.obtainMessage(FileBrowserActivity.MESSAGE_READ, length, 0, a).sendToTarget();

我相信a上面的Toast 是某种类型的对象......我希望你已经覆盖了它的 toString() 方法......

那么最好还是a.toString()a + ""吐司

于 2012-09-08T18:25:07.100 回答
0

很可能是由编码问题引起的。试试这个看看是否有帮助

String str = new String(b, "US-ASCII");

如果上述方法不起作用,您也可以尝试 UTF-8 编码。

于 2012-09-08T17:59:08.260 回答