2016-03-08 130 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通常表示您缺少图书馆需要的东西;无论是对另一个图书馆还是其他图书馆的另一种依赖。

试着深入挖掘图书馆的文献资料,你可能会从中找出一些东西。