Android兼容包示例FragmentTabsPager崩溃

时间:2011-11-17 17:08:07

标签: java android android-fragments android-compatibility

我尝试了Android兼容包提供的示例。 FragmentTabsPager崩溃并出现以下错误:

11-17 19:00:27.414: E/AndroidRuntime(5401): FATAL EXCEPTION: main
11-17 19:00:27.414: E/AndroidRuntime(5401): java.lang.NoClassDefFoundError: com.example.android.supportv4.app.LoaderCustomSupport$AppListFragment
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.example.android.supportv4.app.FragmentTabsPager.onCreate(FragmentTabsPager.java:60)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2633)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2685)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.access$2300(ActivityThread.java:126)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.os.Looper.loop(Looper.java:123)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.main(ActivityThread.java:4633)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at java.lang.reflect.Method.invokeNative(Native Method)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at java.lang.reflect.Method.invoke(Method.java:521)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at dalvik.system.NativeStart.main(Native Method)

我该如何解决?

感谢。

UPD 只是想知道为什么有人投票结束? 我用Google搜索了这个,发现在这里打开了issue 。还没有答案。我认为我的问题是合理的,值得关注。

1 个答案:

答案 0 :(得分:8)

这里有什么问题?
你得到一个NoClassDefFoundError。什么时候发生:

  

当前正在执行的搜索类定义存在   编译了类,但无法再找到定义。

来自oracle documentation

您的类或其中的一部分在编译时可用,但在运行时不再可用。当您的Android项目设置为某个目标API级别并使用它的可用类和方法时,就会发生这种情况。然后在具有较低Android版本的设备上运行该项目(假设您的minSdk设置为在AndroidManifest中允许此项 - 默认情况下该样本项目为4)。突然间,其中一些组件可能无法使用¹。你会收到这个错误。

如何解决?
将项目目标SDK更改为您要支持的版本。当你这样做时,你应该看到错误标记并在你选择的工具中编译问题,例如:日食。 如果将其设置为2.2。例如,您会看到此类使用OnQueryTextListenerSearchViewArrayAdapter.addAll() (所有在API 11中引入)。这些在API级别10或更低级别的设备上不可用。 为此功能构建解决方法应解决此问题。无论如何,考虑到这是示例代码,您应该记住这些方法不可用。

<强> TL; DR:
示例项目使用11级的API功能,这些功能不在兼容包中。在运行低于11的版本的设备上执行时,会抛出此错误。

¹在这种情况下,界面OnQueryTextListener