我正在使用串行事件将从arduino读取的rfid标签传递给处理。在串行事件中,我正在解析并将变量转换为整数。这大部分工作,只有一张rfid卡不会出错。
void serialEvent(Serial thisPort)
{
String inString = thisPort.readString();
if(inString != null)
{
Serial connect1 = (Serial) connections.get(0);
if(thisPort == connect1 )
{
Chair chair = (Chair) chairs.get(0);
if(inString.contains("UID Value:"))
{
int p2 = inString.indexOf(":");
String pString = inString.substring(p2+1);
String pString2 = pString.substring (0,10);
//println(pString2);
pString2.trim();
println("String length: " + pString2.length());
chair.setRFID(pString2);
println(pString2);
}
}
}
}
void setRFID(String r)
{
try{
this.rfid = Integer.parseInt(r);
}
catch (Exception e) {
e.printStackTrace();
}
//set position of person to chair
for (Person person : people)
{
//println(this.rfid != chair.rfid);
//println(this.rfid + "," + "person: " + person.ID + "," + person.RFID);
if(this.rfid == person.RFID)
{
person.setPos(this.pos);
this.personID = person.ID;
}
}
}
try-catch无法正常工作,此行导致问题this.rfid = Integer.parseInt(r);.我认为它可能是一个格式错误的字符串,但字符串似乎没问题。这里检查字符串一致性的结果: 字符串长度:10 1811524219 字符串长度:10 1942302231 字符串长度:10 1010368230 字符串长度:10 9813023219
答案 0 :(得分:6)
9813023219
无效Integer
,因为它大于Integer.MAX_VALUE
,即2147483647
。请改用Long
,MAX_VALUE
为9223372036854775807
。
答案 1 :(得分:2)
您已超过整数的最大值。我建议改用long
。
通过显示Integer.MAX_VALUE
来检查这一点 - 没有int可以超过此值。
java.long.NumberFormatException
。
答案 2 :(得分:1)
数字9813023219
超出了int
数据类型的范围,请尝试将您的数据类型更改为long
,并且它应该有效。
答案 3 :(得分:1)
9813023219是无效的整数,您可以使用Long满足您的要求。如果RFID不超过Long.MAX_VALUE。