2016-03-08 35 views
1

我在我的Android手機應用程序中僅使用三星和QMobile的特定設備獲取了幾個NoClassDefFoundError。如何檢查NoClassDefFoundError?

將添加下面的代碼檢測錯誤?

//Check for Class not found error for Samsung 4.2.2 devices case 
    try { 
     Class.forName("android.support.v7.internal.view.menu.MenuBuilder"); 
    } catch (ClassNotFoundException e) { 
     // Handle Exception by displaying an alert to user to update device firmware. 
    }catch (NoClassDefFoundError e){ 
     // Handle Exception by displaying an alert to user to update device firmware. 
    } 

什麼是主動檢測的NoClassDefFoundError沒有在應用程序崩潰結束了最好的方法是什麼?

編輯:

documentation說,該方法將拋出以下異常,並沒有提到關於NoClassDefFoundError什麼。

Throws: 
LinkageError - if the linkage fails 
ExceptionInInitializerError - if the initialization provoked by this method fails 
ClassNotFoundException - if the class cannot be located 

我可以改寫像

威爾Class.forName(String)NoClassDefFoundError或如何檢查如果一個類有一個「防守」的問題?

+1

你正在處理它的catch塊,它不應該崩潰 –

+0

@SoumitriPattnaik我不包圍問題導致語句與try/catch塊。我只是試圖主動觸發異常,並檢查應用程序是否繼續運行,是否會崩潰。 – brainless

+0

如果它是在一個特定的方法,爲什麼不'拋出NoClassDefFoundError'並在調用方法中處理它。 我只是說,可能有更好的解決方案。 –

回答

0

我認爲try-catch是處理異常(NoClassDefFoundError基本上是)的最佳方法。

但是,處理引起這種情況發生的事情可能是明智的,而不僅僅是遵守效果; NoClassDefFoundError是一種效果,你必須做一些事情來防止它彈出。

如果像你說的事情發生在庫中則有2件事情可以做:

  • 報告它的維護者(如果你覺得這確實是他們的錯誤),或
  • 嘗試修復原因而不是效果(例外)。 NoClassDefFoundError通常表示您缺少圖書館需要的東西;無論是對另一個圖書館還是其他圖書館的另一種依賴。

試着深入挖掘圖書館的文獻資料,你可能會從中找出一些東西。