gpt4 book ai didi

java - java接收数据后无法将string转换为int

转载 作者:行者123 更新时间:2023-12-02 03:05:05 25 4
gpt4 key购买 nike

我有 arduino 发送 2 个 int,并且 int 用“:”分隔例如我的arduino发送数据= 12315:15123

在我使用蓝牙发送该数据后,我在智能手机中收到数据,我需要我收到的 2 个值再次变为 int这是我在 Android 上的部分代码

 void beginListenForData()
{
final Handler handler = new Handler();
final byte delimiter = 10; //This is the ASCII code for a newline character

stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable()
{
public void run()
{
while(!Thread.currentThread().isInterrupted() && !stopWorker)
{
try
{
int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0)
{
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(int i=0;i<bytesAvailable;i++)
{
byte b = packetBytes[i];
if(b == delimiter)
{

byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;

handler.post(new Runnable()
{
public void run()
{

String[] tmp;
String lol,dam;
tmp = data.split(":");
try
{


lol = String.valueOf(crypt[0])+":"+String.valueOf(crypt[1]);
derajat.setText(lol);
}
catch (NumberFormatException nfe)
{
// bad data - set to sentinel
crypt[0] = Integer.MIN_VALUE;
crypt[1] = Integer.MIN_VALUE;
derajat.setText("none");
}

dam = tmp[0]+":"+tmp[1];

myLabel.setText(dam);
//derajat.setText(data);
}
});
}
else
{
readBuffer[readBufferPosition++] = b;
}
}
}
}
catch (IOException ex)
{
stopWorker = true;
}
}
}
});

workerThread.start();
}

如您所见,在“\n”之后数据将被处理首先我使用 data.split() 进行分割,得到 2 个存储在 tmp 中的值之后我将该值解析为 crypt[0] 和 crypt[1]我将文本设置为 derajat 以查看我的值

我也在 myLabel 中设置了文本结果我可以在 myLabel 中看到我的值,但无法将其转换为 int,因为我在标签 derajat 中看不到任何内容有人可以帮我为什么我在收到该数据后无法转换 int 吗?

最佳答案

如果从 Arduino 接收到的数据实际上与您指定的一样:

"12315: 15123"

然后发生的事情是,您收到一个 NumberFormatException,您确实捕获但除了 >derajat 将不包含任何内容(或“无”)......这正是您所经历的。

您收到 NumberFormatException 的原因是因为冒号 (:) 分隔符后面有一个空格,因此当您尝试执行时:

crypt[1] = Integer.parseInt(tmp[1]);

(tmp[1] 实际上包含“15123”)抛出 NumberFormatExceptionInteger.parseInt() 方法不会处理数字字符串中的空格。要解决此问题,请修剪您的拆分字符串,例如:

crypt[0] = Integer.parseInt(tmp[0].trim());
crypt[1] = Integer.parseInt(tmp[1].trim());

或拆分为:

tmp = data.split(": ");

关于java - java接收数据后无法将string转换为int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41865448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com