Android崩溃在onCreate

问题描述:

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

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()之上的行,是什么让它崩溃?

+0

什么是第37行? – codeMagic

+0

LogCat IS指向特定的行。它说异常正在第37行抛出。 –

+0

Logcat指向'at at com.appuccino.unitconverter.MainActivity.onCreate(MainActivity.java:37)'。那里有一个NPE。告诉我们这条线是什么,我们可以提供更准确的帮助。 –

我敢打赌,在NPE在这个line.-

getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

getWindow()文档,机会是,该方法仍然会返回nullonCreate。如果注释状态不需要该行,请尝试删除它。

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

看来,在第37行,你空指针异常:secondSpinner = (Spinner) findViewById(R.id.secondSpinner);

叟,你应该检查你的layout包含此Spinner

+0

显然你通过计算行来得出这个结论,但是OP肯定有'import'语句和'package'名字,所以第37行会进一步下降。此外,这不会导致“NPE”,但可能会导致稍后。 – codeMagic

+0

对不起,我做了一个编辑,codeMagic是正确的,因为它实际上是进一步上升的,因为有导入数据,它在创建subCategoryChoices和onCreate() – AggieDev

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