1

java.lang.NoSuchMethodError: android.nfc.NdefRecord.createUriこのコードからの例外に直面しています:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
   mNfcAdapter = NfcAdapter.getDefaultAdapter(this.getApplicationContext());
   try {
        if (mNfcAdapter == null) {
        } else {
            NdefRecord uriRecord = NdefRecord.createUri(someUri);
            NdefMessage msg = new NdefMessage(new NdefRecord[] {uriRecord});
            mNfcAdapter.setNdefPushMessage(msg, this);
        }
    } catch (Exception e) {
        Log.e(getClass().getSimpleName(), "initNfcNdefMessage()", e);
    }
}

ただし、スタック トレースには出力されinitNfcNdefMessage ません。それはどのように可能ですか?

4

2 に答える 2

5

java.lang.NoSuchMethodErrorExceptionクラスから派生していないためです。

Exceptionオブジェクトでキャッチしようとしていますが、元々はスロー可能です

これをチェックして

java.lang.Object
  extended byjava.lang.Throwable
      extended byjava.lang.Error
          extended byjava.lang.LinkageError
              extended byjava.lang.IncompatibleClassChangeError
                  extended byjava.lang.NoSuchMethodError

こちらをご覧ください

于 2013-03-16T18:02:06.933 に答える
5

Javaには複数の例外階層があります。

問題は、java.lang.NoSuchMethodErrorがjava.lang.Exceptionから派生していないため、ExceptionをキャッチしてNoSuchMethodErrorをキャッチできないことです。NoSuchMethodErrorを明示的にキャッチする必要があります。そうでない場合は、代わりにThrowableをキャッチできます。

チェックされた例外の詳細については、効果的なJava例外に関する記事を参照してください。

于 2013-03-16T18:03:38.727 に答える