Java 不幸的是,木卫四已经停止工作

Java 不幸的是,木卫四已经停止工作,java,android,xml,eclipse,nullpointerexception,Java,Android,Xml,Eclipse,Nullpointerexception,因此,当我尝试在emulator中运行代码时,应用程序背景会弹出,然后关闭,并显示一个对话框,“不幸的是,Callisto已停止工作” 我不知道出了什么问题,只知道它给了我一个空指针异常(第49行),但第49行什么都没有 <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="wrap_content" android

因此,当我尝试在emulator中运行代码时,应用程序背景会弹出,然后关闭,并显示一个对话框,“不幸的是,Callisto已停止工作” 我不知道出了什么问题,只知道它给了我一个空指针异常(第49行),但第49行什么都没有

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
XML

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
}

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
仅供参考,应用程序昨晚正在加载。。谢谢你的帮助,请记住我是Android编程新手。谢谢。

问题就在这里

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
 home_button = (Button) findViewById(R.id.bHome);

在布局文件中没有
bHome

问题可能是,您正在使用setContentView()显示不同的屏幕。您不应使用此方法更改屏幕,您应为此使用不同的activitys

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
通常,在oncreate中,每个活动只设置一次contentView

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
您的R.layout.main布局可能不包含“主页”按钮,但R.layout.settings布局包含

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
首先,在这一行加载主布局:
setContentView(R.layout.main)但由于此布局文件不包含主页按钮,
findViewById(R.id.bHome)
将返回
null
。然后,对该返回值调用方法,
home_button.setOnClickListener()在您的情况下,将导致NullPointerException

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
您应该做以下几点:

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
为主布局创建活动:

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
public class CallistoMainActivity extends Activity {
/** Called when the activity is first created. */
 Button settings_button;
 Button classes_button;
 Button home_button;
 CheckBox notif_cb;
 CheckBox math_cb;
 CheckBox science_cb;
 CheckBox ss_cb;
 CheckBox english_cb;
 CheckBox language_cb;

 boolean notif,math,science,english,ss,language;




 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //main layout
    settings_button = (Button) findViewById(R.id.bSettings);
    classes_button = (Button) findViewById(R.id.bClasses);

    settings_button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            startActivity(new Intent(getApplicationContext(),
                   CallistoSettingsActivity.class));
        }
    });
}
以及设置布局的活动:

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>
public class CallistoSettingsActivity extends Activity {

 Button home_button;
 CheckBox notif_cb;
 CheckBox math_cb;
 CheckBox science_cb;
 CheckBox ss_cb;
 CheckBox english_cb;
 CheckBox language_cb;

 boolean notif,math,science,english,ss,language;

/** Called when the activity is first created. */
 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);


    //settings layout
    notif_cb = (CheckBox) findViewById(R.id.cbNotif);
    math_cb = (CheckBox) findViewById(R.id.cbMath);
    science_cb = (CheckBox) findViewById(R.id.cbScience);
    ss_cb = (CheckBox) findViewById(R.id.cbSS);
    english_cb = (CheckBox) findViewById(R.id.cbEnglish);
    language_cb = (CheckBox) findViewById(R.id.cbLang);
    home_button = (Button) findViewById(R.id.bHome);

    notif = true;
    math = true;
    science = true;
    english = true;
    ss = true;
    language = true;

    home_button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            finish();
            //You could either use finish() to finish the current activity, and return to the previous CallistoMainActivity on the stack.
            //Or you could simply start the main activity again by using the startActivity() method you see in the onclicklistener on the settings button.
        }
    });        
}
现在,当您单击主活动中的设置按钮时,将显示设置活动。单击“设置”活动中的“主页”按钮时,设置活动将完成,用户将返回到堆栈上的上一个活动;这是主要的活动。 另外,不要忘记在AndroidManifest.xml中定义settingsactivity

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>

编辑:你应该注意的另一件事是,如果“第x行”有一个错误,但是代码中的第x行没有任何内容,那么在你的Android设备上运行的代码与你在编辑器中看到的代码不同。这可能是它昨晚运行的原因,但现在不再运行了。

代码中的第49行在哪里?当应用程序崩溃时发布logcat结果我很清楚是什么导致了这个,请看我的答案。这确实导致了错误,但TS不理解我猜的android活动设计模式。更多细节请参见我的答案。@NickL我们不是来为他编写完整代码的!因为他需要付出一些努力。你是对的。但是,由于他的代码中没有任何错误,除了它在一个活动中并且他使用setcontentView更改布局之外,我决定拆分代码(复制/粘贴)。我认为他仍然无法仅凭你的答案解决问题,因为他可能不会真正理解为什么按钮不在布局文件中。据他所知,这是一件好事。
<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/callisto_heading" />

<Button
    android:id="@+id/bClasses"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Classes" 
    android:layout_gravity="center"
    android:onClick=""
   />

<Button
    android:id="@+id/bSettings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Settings" 
    android:layout_gravity="center" 
    android:onClick=""  
 />

</LinearLayout>