为什么此按钮单击会导致应用程序崩溃

时间:2014-05-07 07:27:07

标签: android nullpointerexception

我是编程新手。我有一个按钮,单击时应该将imageView的图像更改为不同的图像。但是当点击按钮时,应用程序崩溃了。我确定它的东西很小,我很遗憾。我查找错误,似乎无法找到任何可以帮助解决这个问题。我很感谢能得到的任何帮助。

public class MonthSelect extends Activity {

    //declaring variables
    ImageView image;
    Button jan;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_month_select);

        addListenerOnButton();
    }

    private void addListenerOnButton() {
        image = (ImageView)findViewById(R.id.monthDisplay);

        jan = (Button)findViewById(R.id.januaryButton);
        jan.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                image.setImageResource(R.drawable.a_10);

            }

        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.month_select, menu);
        return true;
    }

}

带有imageview的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="#000000"
    tools:context=".MonthSelect" >

    <ImageView
        android:id="@+id/monthDisplay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@string/month_quote_display"
        android:src="@drawable/a_1" />

</RelativeLayout>

错误

05-07 08:22:10.464: E/AndroidRuntime(7415): FATAL EXCEPTION: main
05-07 08:22:10.464: E/AndroidRuntime(7415): java.lang.NullPointerException
05-07 08:22:10.464: E/AndroidRuntime(7415):     at com.learning.MonthSelect$1.onClick(MonthSelect.java:54)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at android.view.View.performClick(View.java:4091)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at android.view.View$PerformClick.run(View.java:17072)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at android.os.Handler.handleCallback(Handler.java:615)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at android.os.Looper.loop(Looper.java:153)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at android.app.ActivityThread.main(ActivityThread.java:4987)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at java.lang.reflect.Method.invokeNative(Native Method)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at java.lang.reflect.Method.invoke(Method.java:511)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
05-07 08:22:10.464: E/AndroidRuntime(7415):     at dalvik.system.NativeStart.main(Native Method)

3 个答案:

答案 0 :(得分:4)

Button jan文件中没有activity_month_select.xml,您仍然可以创建jan

jan = (Button)findViewById(R.id.januaryButton);// Cause Null Pointer Exception

您需要在布局文件中添加ID为Button的{​​{1}}。

答案 1 :(得分:0)

您发布的布局似乎不是 R.layout.activity_month_select,而是包含您使用的ImageView的单独布局。 从我在日志中看到的内容来看,R.layout.activity_month_select实际上包含ID为R.id.januaryButton的按钮,而不是ImageView R.id.monthDisplay

确保那些(Button和ImageView)都在R.layout.activity_month_select

答案 2 :(得分:0)

根据你的需要,你需要在activity_month_select布局中使用R.id.januaryButton

如果您需要在新窗口中显示图像,只需使用图像布局创建另一个活动作为内容视图,然后使用按钮的onclick功能中的活动按钮调用活动图像。