2012-02-07 47 views
1

在Android中,我已經拋出了以下錯誤:安卓:java.lang.NoSuchFieldError的:android.os.Build.SERIAL

java.lang.NoSuchFieldError: android.os.Build.SERIAL 

這僅發生在某些設備上,例如: 「sec_smdk6410」 或「 sdkDemo」。

我試圖捕捉異常,但它忽略了try/catch塊。

try { 
     return android.os.Build.SERIAL; 
    } catch (Exception e) { 
     return null; 
    } 

有無論如何我可以檢測到,如果這個錯誤將被拋出,以適應我的代碼?

謝謝。

回答

6

文檔狀態它僅適用於API級別9 您可以通過使用檢查API級別:

if(Build.VERSION.SDK_INT >= 9) 
    // safe to use 
else 
    // ignore 

未經檢驗的,但我想給它一個去

+0

聰明......我會試試看。 – Joel 2012-02-07 13:46:28

+0

它的工作非常感謝。 – Joel 2012-02-07 18:44:33

+1

只是一個頭,但這個版本檢查只適用於如果你在設備上運行** API> 4 **。如果設備的API級別爲4或更低(甜甜圈或更低),則該應用程序將以['VerifyError'](http://developer.android.com/reference/java/lang/VerifyError.html)崩潰。原因是因爲從Android 2.0開始,到Dalvik VM加載類的方式發生了變化,直到它實際使用它們。請參閱:http://stackoverflow.com/a/7265487/708906 – 2013-06-05 01:55:21

0

NoSuchFieldError不一個Exception,它是一個Error(這就是爲什麼它沒有被捕獲到你的代碼中)。

ErrorsExceptions都是Throwables。這意味着Errors也可以釣到:

try { 
    return android.os.Build.SERIAL; 
} catch (NoSuchFieldError e) { //Notice the change here 
    return null; 
} 

更多關於"Differences between Exception and Error"