我的Android应用程序最初用于Android 2.2以上,因此我使用了
player.getSettings().setPluginState(WebSettings.PluginState.ON);
用于WebView对象。
现在我决定向Android 2.1用户打开我的应用程序,我将代码更改为:
try {
player.getSettings().setPluginState(WebSettings.PluginState.ON);
} catch (Exception e) {
player.getSettings().setPluginsEnabled(true);
}
这样,应用程序强制关闭,我在logcat上出现此错误:
Uncaught handler: thread main exiting due to uncaught exception
java.lang.NoClassDefFoundError: android.webkit.WebSettings$PluginState
at com.dokgu.joindota.WatchVOD.onCreate(WatchVOD.java:34)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
at android.app.ActivityThread.access$2200(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
有关此错误的任何帮助吗?
编辑: 此错误仅出现在2.1仿真器上。
答案 0 :(得分:7)
有点晚了 - 我确定你现在已经弄明白了 - 但错误是因为Android版本上没有类PluginState
< 2.2(API 8)。请参阅the android docs on PluginState。
您无法通过try {} catch (Exception e) {}
发现这一点的原因是因为NoClassDefFoundError
不是Exception
- 它是Error
。虽然Error
和Exception
都是Throwable
的子项,但它们并不相同,因此您无法使用Error
来抓住Exception
,反之亦然。
要解决此问题,您可以采取以下任一方法:
检查设备运行的Android版本,并在设备运行API版本> = 8时仅调用PluginState
。
在catch()
语句中,抓住NoClassDefFoundError
代替Exception
。
此外,Eclipse很可能会显示提示PluginState
的Lint警告 - 类仅适用于API 8+。您可以通过在方法上方的行中添加@SuppressLint("NewApi")
来隐藏/忽略此警告。