java - Android:将 NDEF 记录有效负载从字节转换为 int

标签 java android nfc ndef nfc-p2p

很好奇如何将 NdefRecord 中的有效负载从它所进入的字符串转换为可在我的应用程序的其余部分中使用的整数。 parseint 和 valueof 方法导致我的应用程序崩溃。不知何故设法将故障范围缩小到一行代码:

int newtimer = Integer.valueOf(newtimermsg);

此行导致我的应用程序崩溃,Newtimermsg 是从接收到的 NdefRecord 的有效负载中提取的字符串,如下面的代码所示:

String newtimermsg = new String(msg.getRecords()[0].getPayload());

这有效,因为我已经通过 newtimermsg 上使用的 settext 检查了应用程序,它完美地显示了收到的消息,但我想知道如何将其转换为整数。听起来非常基本和愚蠢,不知道如何做到这一点,但任何帮助将不胜感激。

最佳答案

这取决于您最初如何将整数值存储在 NDEF 记录的有效负载中。

  1. 与整数的文本表示形式相互转换

    转换整数以记录负载:

    int myInteger = ...;
    String payloadString = Integer.toString(myInteger);
    byte[] payload = payloadString.getBytes("US-ASCII");
    

    将记录负载转换为整数:

    byte[] payload = ...;
    String payloadString = new String(payload, "US-ASCII");
    int myInteger = Integer.parseInt(payloadString);
    
  2. 整数与字节数组直接转换(存储效率更高)

    转换整数以记录负载:

    int myInteger = ...;
    ByteBuffer buffer = ByteBuffer.allocate(4);
    buffer.putInt(myInteger);
    byte[] payload = buffer.array();
    

    将记录负载转换为整数:

    byte[] payload = ...;
    ByteBuffer buffer = ByteBuffer.wrap(payload);
    int myInteger = buffer.getInt();
    

关于java - Android:将 NDEF 记录有效负载从字节转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23039330/

相关文章:

java - CompletableFuture | thenApplyAsync 与 thenCompose 及其用例

升级到 gradle 5.0 后 Android 数据绑定(bind) "Missing import expression although it is registered"

android - 使用 websockets 进行 Android 聊天

android - 带有gradle产品风格的应用内结算

java - lambda 表达式中的返回类型错误 : Cannot be converted to boolean

java - 使用 Scanner 时出现 NoSuchElementException

android - AIR/Android NFC 标签正在打开浏览器

android - 如何读取NFC标签的NDEF Msg和Records?

java - Spring调度程序: start at 12:25PM and run every 15 minutes after that

android - 测试 HCE 支付应用