2016-09-21 4 views
-2

Когда я компилирую/создаю свое приложение, он создает мой 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); 
    } 
} 

Я предполагаю, что есть что-то, что я делаю здесь, что это не правильно, и бросает ошибку, когда я пытаюсь сканировать тег. Но я понятия не имею, что это может быть.

+4

«Я ожидаю, что приложение будет работать» - есть ** много ** типов ошибок, которые не могут быть обнаружены во время компиляции. «Я получаю сообщение об ошибке« К сожалению, BMT_Admin перестает работать ».» - используйте LogCat для проверки трассировки стека Java, связанной с вашим сбоем: https://stackoverflow.com/questions/23353173/unappro-myapp-has-stopped- how-can-i-solve-this – CommonsWare

ответ

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]; 

для того, чтобы выделить пространство для двух элементов массива.

+0

Спасибо, Майкл ... Я очень, очень новичок в этом, поэтому я ценю отзывы и предложения! Я полностью упустил 0 в моей конфигурации массива ... он всегда помогает взглянуть на другой набор глаз. Я попробую это и прохожу через трассировку стека перед публикацией снова. – Leo