抛出异常,忽略catch部分

Key*_*ari 1 android exception nfc

我正面临着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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,initNfcNdefMessage 不会在堆栈跟踪中打印.这怎么可能?

Pra*_*ani 5

因为java.lang.NoSuchMethodError不是从Exception类派生的.

您试图通过Exception对象捕获它,但它最初是throwable

检查一下

java.lang.Object
  extended byjava.lang.Throwable
      extended byjava.lang.Error
          extended byjava.lang.LinkageError
              extended byjava.lang.IncompatibleClassChangeError
                  extended byjava.lang.NoSuchMethodError
Run Code Online (Sandbox Code Playgroud)

请参考这里


jar*_*mod 5

Java有多个异常层次结构.

您的问题是java.lang.NoSuchMethodError不是从java.lang.Exception派生的,因此您无法通过捕获异常来捕获NoSuchMethodError.您需要显式捕获NoSuchMethodError,否则您可能会捕获Throwable.

请参阅有关有效Java异常的文章,以了解有关已检查异常的更多信息.