抛出异常,忽略catch部分

时间:2013-03-16 17:55:57

标签: 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);
    }
}

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

2 个答案:

答案 0 :(得分: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

Refer here

答案 1 :(得分:5)

Java有多个异常层次结构。

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

请参阅Effective Java Exceptions上的文章,了解有关已检查例外的详情。