我的启动画面后我的程序不断崩溃。为啥?

Posted

技术标签:

【中文标题】我的启动画面后我的程序不断崩溃。为啥?【英文标题】:My program keeps crashing after my splash screen. Why?我的启动画面后我的程序不断崩溃。为什么? 【发布时间】:2015-03-02 01:40:04 【问题描述】:

我正在开发一个安卓程序。它显示启动屏幕,但在进入主要活动之前崩溃。这些是错误:

03-01 22:48:10.473    2657-2657/com.example.user.checkbox E/androidRuntime? FATAL EXCEPTION: main
    Process: com.example.user.checkbox, PID: 2657
    java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.user.checkbox/com.example.user.favoritebooks.Main: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2334)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
            at android.app.ActivityThread.access$900(ActivityThread.java:169)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5487)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.user.favoritebooks.Main.onCreate(Main.java:36)
            at android.app.Activity.performCreate(Activity.java:5451)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
            at android.app.ActivityThread.access$900(ActivityThread.java:169)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5487)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
            at dalvik.system.NativeStart.main(Native Method)

这是附近的异常。最后一行是异常发生的地方。我不明白,我声明了适配器。:

  public static final String favorites = "MyUserChoice" ;
    ArrayList<String> items = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState)
    
        getFav = (Button)findViewById(R.id.getchoice);
        savetoshared = getSharedPreferences(favorites, Context.MODE_PRIVATE);
        BookList = (ListView)findViewById(R.id.list);
        clearbutton = (Button)findViewById(R.id.clearall);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, getResources().getStringArray(R.array.Favorite_Books));
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        BookList.setAdapter(adapter); //error
        BookList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        if(savetoshared.contains(favorites))
        
            LoadSelections();
        

【问题讨论】:

您是否在开发者设置中启用了 USB 调试? 检查这个:***.com/questions/26079838/… 调试已启用。我一直在运行包括这个在内的程序。 检查你的主要活动第36行有一个空指针异常来,先纠正它。 你只是在做setContentView()。所以你不可能初始化BookList..因此崩溃。 【参考方案1】:

您需要移动此代码

 getFav = (Button)findViewById(R.id.getchoice);
 savetoshared = getSharedPreferences(favorites, Context.MODE_PRIVATE);
 BookList = (ListView)findViewById(R.id.list);
 clearbutton = (Button)findViewById(R.id.clearall);
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, getResources().getStringArray(R.array.Favorite_Books));

之后

 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);

因为您在super.onCreate(savedInstanceState); 方法调用之前初始化了您的视图。

【讨论】:

基本上你不能在setContentView之前使用findViewsById,也不能在super.onCreate之前使用getStringgetResourcessetContentView或几乎任何东西。

以上是关于我的启动画面后我的程序不断崩溃。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在我滚动显示来自 plist 的数据的 tableview 后我的应用程序崩溃?

我的应用程序不断崩溃,大概是因为空对象引用错误,但我不知道为啥

我的应用程序不断崩溃,但我不知道为啥

单击按钮后我的应用程序崩溃[重复]

为啥当我的 heroku 应用程序崩溃时出现 mongodb 错误? (在本地工作就好了!)

我的程序崩溃了,我不知道为啥