我的应用程序编译和构建正常,但意外退出?

时间:2016-09-21 17:44:51

标签: android crash nfc ndef android-applicationrecord

当我编译/构建我的应用程序时,它会创建我的APK而没有任何错误。此外,在Android Studio中,我没有错误通知。所以我希望该应用程序能够运行。但是,当我安装并打开应用程序时,只要我扫描NFC标签,就会收到错误消息“很遗憾BMT_Admin已停止工作”。

我唯一要做的就是将外部记录写入标签,称为“有效负载”,然后还将AAR(Android应用程序记录)写入可由将来扫描调用的标记。我正在使用的代码如下:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    if(intent.hasExtra(NfcAdapter.EXTRA_TAG))
    {
        Toast.makeText(this, "NFC Scan", Toast.LENGTH_SHORT).show();
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

        byte[] payload = "my string_tag1".getBytes();

        NdefRecord[] ndefRecords = new NdefRecord[0];
        ndefRecords[0] = NdefRecord.createExternal("nfctutorials", "externaltype", payload);
        ndefRecords[1] = NdefRecord.createApplicationRecord("com.example.myapp");
        NdefMessage ndefMessage = new NdefMessage(ndefRecords);
        writeNdefMessage(tag, ndefMessage);
    }
}

我假设我在这里做的事情是不正确的,当我尝试扫描标签时会抛出错误。但我不知道那可能是什么。

1 个答案:

答案 0 :(得分:0)

如果您期望获得真正的帮助(除了疯狂的猜测),您需要显示错误消息(即来自ADB日志的堆栈跟踪)和相关的代码部分。

除此之外,根据您在问题中的代码,最可能的原因可能是行

NdefRecord[] ndefRecords = new NdefRecord[0];

在那里,您创建一个空数组。但是,在接下来的两行中,您尝试访问不存在的索引0和1:

ndefRecords[0] = NdefRecord.createExternal("nfctutorials", "externaltype", payload);
ndefRecords[1] = NdefRecord.createApplicationRecord("com.example.myapp");

这显然会导致ArrayIndexOutOfBounds异常,因为0和1超出了空数组的末尾。

因此,您需要将数组分配更改为

NdefRecord[] ndefRecords = new NdefRecord[2];

为两个数组元素分配空间。