我在这段代码中面临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
。怎么可能?
答案 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
答案 1 :(得分:5)
Java有多个异常层次结构。
您的问题是java.lang.NoSuchMethodError不是来自java.lang.Exception,因此您无法通过捕获异常来捕获NoSuchMethodError。您需要显式捕获NoSuchMethodError,否则您可能会捕获Throwable。
请参阅Effective Java Exceptions上的文章,了解有关已检查例外的详情。