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

Java 字符串在Toast和Logcat中的显示方式不同:Android,java,android,string,Java,Android,String,在我的应用程序中,我希望通过蓝牙接收一些字符串,然后使用处理程序将它们传递回我的UI线程。我使用了处理程序对象将数据传递回主UI线程: mHandler.obtainMessage(MainActivity.MESSAGE_READ, length, 0, a).sendToTarget(); 注意:a是我从Bluetooth InputStream获取的字节数组 在我的UI线程中,我有: private final Handler mHandler = new Handler() {

在我的应用程序中,我希望通过蓝牙接收一些字符串,然后使用处理程序将它们传递回我的UI线程。我使用了处理程序对象将数据传递回主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);
                }
}
例如,如果我将一个简单的字符串“cfm12345”从我的另一个蓝牙设备(它是一个由微控制器控制的蓝牙模块)发送到我的Android手机,Toast将在屏幕上精确显示“cfm12345”。但在Logcat中,我看到了这个丑陋的字符串:

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

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


提前谢谢

很可能是编码问题造成的。试试这个,看看是否有帮助

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

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

mHandler.ActainMessage(FileBrowserActivity.MESSAGE_READ,length,0,a).sendToTarget()

我相信在上面的
a
中,Toast是某种类型的对象。。。。我希望您已经重写了它的toString()方法


然后最好在吐司中选择
a.toString()
a+”

当您使用
+
操作符时,我相信
str.toString()
是在幕后调用的。使用时会发生什么情况:
Toast.makeText(MainActivity.this,str.toString(),Toast.LENGTH_LONG).show()?谢谢您的推荐。我以前试过两种,但都不管用。