Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中数字字符串到整数的转换_Java_Android_Parseint_Android Handler_String Conversion - Fatal编程技术网

Java android中数字字符串到整数的转换

Java android中数字字符串到整数的转换,java,android,parseint,android-handler,string-conversion,Java,Android,Parseint,Android Handler,String Conversion,在下面的代码中,当我尝试将msgStr转换为整数时,应用程序强制关闭。谁能告诉我原因吗?是因为msgStr格式不正确吗? 注意:msg是一个obj直通处理程序。msgStr是一个数字字符串 主要活动代码: private handleMessage(Message msg){ byte[] byteArr = (byte[])msg.obj; String msgStr = new String(byteArr,"utf-8"); try{ int val = Integer.parseInt(

在下面的代码中,当我尝试将msgStr转换为整数时,应用程序强制关闭。谁能告诉我原因吗?是因为msgStr格式不正确吗? 注意:msg是一个obj直通处理程序。msgStr是一个数字字符串

主要活动代码:

private handleMessage(Message msg){
byte[] byteArr = (byte[])msg.obj;
String msgStr = new String(byteArr,"utf-8");
try{
int val = Integer.parseInt(msgStr);
}catch(Exception e){
e.printStackTrace;
}
蓝牙连接线程:

  private class ConnectedThread extends Thread {
  private final BluetoothSocket mmSocket;
  private final InputStream mmInStream;
  private final OutputStream mmOutStream;

 public ConnectedThread(BluetoothSocket socket) {
     mmSocket = socket;
    InputStream tmpIn = null;
    OutputStream tmpOut = null;

    // Get the input and output streams, using temp objects because
    // member streams are final
    try {
        tmpIn = socket.getInputStream();
        tmpOut = socket.getOutputStream();
    } catch (IOException e) { }

    mmInStream = tmpIn;
    mmOutStream = tmpOut;
  }

  public void run() {
    byte[] buffer = new byte[1024];  // buffer store for the stream
    int bytes; // bytes returned from read()

    // Keep listening to the InputStream until an exception occurs
    while (true) {
        try {
            // Read from the InputStream
            bytes = mmInStream.read(buffer);
            // Send the obtained bytes to the UI activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                    .sendToTarget();
        } catch (IOException e) {
            break;
        }
    }
  }
现在谁能说出问题出在哪里?另外,如果mmInStream由数字数据组成,那么如何区分2位数据和3位数据并将其存储在字节数组缓冲区中?

试试看

String msgString = new String(...);
改变这个

String msgStr = String(byteArr);


这篇文章可能会对您有所帮助,因为您将字节数组强制转换为字符串,这是行不通的。您需要使用:


当然,UTF-8根据您使用的字符集而有所不同

首先,通过以下代码将字节转换为字符串

String msg = new String(bytes, "UTF-8");
然后将字符串转换为整数,如下所示

int m = Integer.parseInt(msg);

尝试直接将消息转换为字符串:

String msgStr = (String)msg.obj;
如果这不起作用,也不要尝试将其转换为整数,可能是检索到的字符串不是整数

您还可以直接将处理程序消息作为整数发送,而无需转换:

yourhandlername.obtainMessage(what, arg1, arg2, obj).sendToTarget();
arg1:是一个整数

arg2:是一个整数

因此,当收到:

int val = msg.arg1;

请发布logcat exception.cover尝试捕获Integer.parseInt行,然后您知道为什么要强制关闭。
String msgStr = (String)msg.obj;
yourhandlername.obtainMessage(what, arg1, arg2, obj).sendToTarget();
int val = msg.arg1;