字符串在Toast和Logcat中的显示方式不同:Android

时间:2012-09-08 17:48:48

标签: java android string

在我的应用程序中,我希望通过蓝牙接收一些字符串,然后使用处理程序将它们传递回我的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);
                }
}

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

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

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

有人可以向我解释为什么会这样吗?如何解决这个问题?请帮帮我。

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

我相信上面 Toast中的a是某种类型的对象 ....我希望你重写了它的toString()方法......

然后更好地选择 Toast中的a.toString()a + ""