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.NoSuchMethodError不是从Exception类派生的。

您试图通过 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派生的,因此您无法通过捕获异常来捕获 NoSuchMethodError。您需要明确地捕获 NoSuchMethodError 或者您可以捕获 Throwable 。

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

于 2013-03-16T18:03:38.727 回答