【问题标题】:Android crash in onCreateAndroid 在 onCreate 崩溃
【发布时间】:2013-10-10 14:16:52
【问题描述】:

每当我运行我的应用程序时,我第一次从 Eclipse 运行它时它运行良好。但是,如果我关闭应用程序并重新打开它,它将在 onCreate 上崩溃。这是 LogCat:

10-10 02:50:00.665: E/AndroidRuntime(29564): FATAL EXCEPTION: main
10-10 02:50:00.665: E/AndroidRuntime(29564): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appuccino.unitconverter/com.appuccino.unitconverter.MainActivity}: java.lang.NullPointerException
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.os.Looper.loop(Looper.java:137)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.app.ActivityThread.main(ActivityThread.java:4898)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at java.lang.reflect.Method.invokeNative(Native Method)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at java.lang.reflect.Method.invoke(Method.java:511)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at dalvik.system.NativeStart.main(Native Method)
10-10 02:50:00.665: E/AndroidRuntime(29564): Caused by: java.lang.NullPointerException
10-10 02:50:00.665: E/AndroidRuntime(29564):    at com.appuccino.unitconverter.MainActivity.onCreate(MainActivity.java:37)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.app.Activity.performCreate(Activity.java:5206)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
10-10 02:50:00.665: E/AndroidRuntime(29564):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
10-10 02:50:00.665: E/AndroidRuntime(29564):    ... 11 more

还有我的 mainActivity 的第一部分:

public class MainActivity extends FragmentActivity implements
        OnItemSelectedListener {

    /**
     * The serialization (saved instance state) Bundle key representing the
     * current dropdown position.
     */
    private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";
    private Spinner firstSpinner;
    private Spinner secondSpinner;
    final String[] mainCategoryChoices = {"Acceleration", "Angles", "Area", "Astronomical", "Clothing", "Computers and Electronics", "Cooking", "Date/Time", "Density", "Energy"};
    final String[] subCategoryChoices = {"Acre", "Barn", "Bunder", "Hundred", "Jerib", "Kappland", "Labor", "Ping", "Rai", "Shed", "Sitio", "Square", "Square Mile", "Square Yard"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);  //not necessary
    setContentView(R.layout.activity_main);

    ArrayAdapter<String> firstAdapter = new ArrayAdapter<String>(
                MainActivity.this, android.R.layout.simple_dropdown_item_1line,
                mainCategoryChoices);
    ArrayAdapter<String> secondAdapter = new ArrayAdapter<String>(
                MainActivity.this, android.R.layout.simple_dropdown_item_1line,
                subCategoryChoices);
    final ActionBar actionBar = getActionBar();
    if(actionBar != null)
    {
        actionBar.setCustomView(R.layout.action_bar_custom);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setDisplayUseLogoEnabled(false);
        actionBar.setDisplayShowHomeEnabled(false);
    }

    firstSpinner = (Spinner) findViewById(R.id.firstSpinner);
    secondSpinner = (Spinner) findViewById(R.id.secondSpinner);

    firstSpinner.setAdapter(firstAdapter);
    secondSpinner.setAdapter(secondAdapter);

    firstSpinner.setOnItemSelectedListener(this);
    secondSpinner.setOnItemSelectedListener(this);

}

日志信息指向的第 37 行转到说

的行
final String[] subCategoryChoices = {"Acre", "Barn", "Bunder", "Hundred", "Jerib", "Kappland", "Labor", "Ping", "Rai", "Shed", "Sitio", "Square", "Square Mile", "Square Yard"};

虽然当我点击它时它会转到 onCreate() 正上方的行,但什么可能导致它崩溃?

【问题讨论】:

  • LogCat 指向特定的行。它说在第 37 行抛出异常。
  • Logcat 指向at com.appuccino.unitconverter.MainActivity.onCreate(MainActivity.java:37)。那里有一个NPE。告诉我们那是哪一行,我们可能会提供更准确的帮助。
  • 始终在堆栈跟踪中查找Caused by 行,告诉您错误发生的原因和位置
  • 抱歉,我编辑了原始帖子并在底部添加了第 37 行是 subCategoryChoices[] 的创建,但是当我双击它时,它会将我引导到 onCreate() 上方的行

标签: android eclipse crash nullpointerexception logcat


【解决方案1】:

我敢打赌NPE 在这一行。-

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

根据getWindow() 文档,该方法可能仍会在onCreate 中返回null。如果评论指出该行不是必需的,请尝试将其删除。

此外,您应该仔细检查您的 activity_main 布局是否包含视图 firstSpinnersecondSpinner

【讨论】:

    【解决方案2】:

    我最终在 ssantoszookey's 答案的帮助下解决了这个问题,我正在使用包含微调器的自定义 actionBar 布局,而 activity_main 只是一个用于显示片段的 frameLayout,因此两个微调器在我使用的布局上下文中不存在。

    【讨论】:

      【解决方案3】:

      您似乎在第 37 行出现空指针异常:secondSpinner = (Spinner) findViewById(R.id.secondSpinner);

      Sou,您应该检查您的layout 是否包含此Spinner

      【讨论】:

      • 显然您通过计算行数得出了这个结论,但 OP 肯定有 import 语句和 package 名称,因此第 37 行将进一步下降。此外,这不会导致NPE,但可能会在以后导致。
      • 是的,对不起,我进行了编辑,codeMagic 是正确的,因为它实际上更进一步,因为有导入数据,它位于 subCategoryChoices 的创建和 onCreate() 之间的界限
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多