1

我正在开发一个 Android 应用程序,并且在修改 Fragment 的代码时,现在每当我尝试启动该应用程序时都会遇到严重的崩溃。奇怪的是,NullPointerException 在它真正到达我的代码之前就被抛出,因为当我进入调试模式时,异常在我到达 MainActivity 的 OnCreate() 之前被抛出。特别令人费解的是,我并没有在 MainActivity 和它的布局中弄乱任何东西。

下面的堆栈跟踪。有任何想法吗?

07-30 15:39:52.753: E/AndroidRuntime(5348): FATAL EXCEPTION: main
07-30 15:39:52.753: E/AndroidRuntime(5348): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.legacy/com.example.legacy.MainActivity}: java.lang.NullPointerException
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.access$700(ActivityThread.java:143)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.os.Looper.loop(Looper.java:137)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.main(ActivityThread.java:4950)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at java.lang.reflect.Method.invokeNative(Native Method)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at java.lang.reflect.Method.invoke(Method.java:511)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at dalvik.system.NativeStart.main(Native Method)
07-30 15:39:52.753: E/AndroidRuntime(5348): Caused by: java.lang.NullPointerException
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:656)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.Fragment.performStart(Fragment.java:1481)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1866)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:568)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.Activity.performStart(Activity.java:5189)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2083)

提前致谢。

4

3 回答 3

0

如果这是之前的 Honeycomb,那么您必须使用支持库(我认为您已经这样做了)。

如果您正在使用支持库片段,那么您必须使用 FragmentActivity 而不是从中启动片段的 Activity。

如果您使用的是 setRetainInstance(true),那么请您将其删除并重试。

(这是我建议的链接,实际上有助于解决问题):

Android FragmentManager BackStackRecord.run 抛出 NullPointerException

于 2013-07-30T23:45:49.537 回答
0

有这个完全相同的问题,上面的建议都没有帮助我。帮助我的是检查我的片段的进口:

导入android.os.Bundle;
导入android.util.Log;
导入 android.view.LayoutInflater;
导入android.view.View;
导入android.view.ViewGroup;
导入android.app.Fragment;

公共类 SelectionFragment 扩展片段{

可以看出,Fragment 的导入是android.app.Fragment 而应该是android.support.v4.app.Fragment
因此,如下更改代码解决了我的问题:

导入android.os.Bundle;
导入android.util.Log;
导入 android.view.LayoutInflater;
导入android.view.View;
导入android.view.ViewGroup;
导入android.support.v4.app.Fragment;

公共类 SelectionFragment 扩展片段{

第一个导入可能是 Eclipse 自动添加的。

于 2014-07-15T08:25:10.887 回答
-1

您可能正在尝试fragment activity在 Android 版本低于HoneyComb 3.0. 因此,要运行片段活动,您必须拥有运行 Android 3.0 或更高版本的手机或模拟器。您必须android-support-v4.jar在项目中添加一个支持库。合并该库后,此问题将消失。

于 2013-07-30T23:01:27.720 回答