-3

我尝试了随 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 只想知道为什么有人投票支持关闭?我用谷歌搜索了这个并在这里找到了打开的问题 。还没有答案。我认为我的问题是合理的,值得关注。

4

1 回答 1

8

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

搜索到的类定义在编译当前执行的类时已经存在,但无法再找到该定义。

来自oracle 文档

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

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

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

¹在这种情况下,一个接口,OnQueryTextListener

于 2011-11-20T01:53:10.980 回答