运行时 Android 小部件的 java.lang.NoClassDefFoundError
Posted
技术标签:
【中文标题】运行时 Android 小部件的 java.lang.NoClassDefFoundError【英文标题】:java.lang.NoClassDefFoundError at Runtime Android Widget 【发布时间】:2012-10-23 21:29:18 【问题描述】:我在运行 android 2.3.3 及更早版本的 Android 小部件时遇到问题。
当我在屏幕上安装我的小部件时,会打印此错误:
11-03 10:26:31.127: E/AndroidRuntime(404): FATAL EXCEPTION: main
11-03 10:26:31.127: E/AndroidRuntime(404): java.lang.NoClassDefFoundError: com.app.myapp.StackWidgetService
11-03 10:26:31.127: E/AndroidRuntime(404): at com.app.myapp.StackWidgetProvider.onUpdate(StackWidgetProvider.java:229)
11-03 10:26:31.127: E/AndroidRuntime(404): at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:61)
11-03 10:26:31.127: E/AndroidRuntime(404): at com.app.mobideals.StackWidgetProvider.onReceive(StackWidgetProvider.java:216)
11-03 10:26:31.127: E/AndroidRuntime(404): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1794)
11-03 10:26:31.127: E/AndroidRuntime(404): at android.app.ActivityThread.access$2400(ActivityThread.java:117)
11-03 10:26:31.127: E/AndroidRuntime(404): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981)
11-03 10:26:31.127: E/AndroidRuntime(404): at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 10:26:31.127: E/AndroidRuntime(404): at android.os.Looper.loop(Looper.java:123)
11-03 10:26:31.127: E/AndroidRuntime(404): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-03 10:26:31.127: E/AndroidRuntime(404): at java.lang.reflect.Method.invokeNative(Native Method)
11-03 10:26:31.127: E/AndroidRuntime(404): at java.lang.reflect.Method.invoke(Method.java:507)
11-03 10:26:31.127: E/AndroidRuntime(404): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-03 10:26:31.127: E/AndroidRuntime(404): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-03 10:26:31.127: E/AndroidRuntime(404): at dalvik.system.NativeStart.main(Native Method)
问题是由于编译器没有到达在 StackWidgetProvider 类的 onUpdate 方法中的这一行执行到 StackWidgetService 类的链接:
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
// update each of the widgets with the remote adapter
for (int i = 0; i < appWidgetIds.length; ++i)
// Here we setup the intent which points to the StackViewService which will
// provide the views for this collection.
Intent intent = new Intent(context, StackWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
该小部件适用于其他版本的 Android,如 3.0、4.0 等...
请帮帮我:)
【问题讨论】:
您是否在 Manifest 中声明了服务? 即使我遇到了同样的问题。你有没有解决这个问题。请帮我解决这个问题 【参考方案1】:如果您已将 eclipse 插件更新到 ADT 17,您的解决方案可能在这里:Android java.lang.NoClassDefFoundError
也可以在这里查看:http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17
【讨论】:
感谢您的回复。好像不是这个错误。事实上,问题在于方法:appWidgetManager.notifyAppWidgetViewDataChanged(i, R.id.stack_view);
此方法不适用于我的清单中指定的 min target sdk 10:<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="12" />
因为我想涵盖 Android 2.3.3(目标 10),而在我之前是最小目标 = 11。我该怎么做才能替换此方法(notifyAppWidgetViewDataChanged 或引入条件以仅在目标 = 11 时使用此代码?以上是关于运行时 Android 小部件的 java.lang.NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章