java - NullPointerException 导致 Android 应用程序崩溃

标签 java android nullpointerexception

每当我启动 Activity 时,我的应用程序都会不断收到 NullPointerException 错误。这看起来很奇怪,因为一切都已声明。

这是我的 Activity :

package com.example.calendar;

import java.util.Date;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CalendarView;
import android.widget.EditText;
import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import com.example.calendar.Appointment;


public class CreateAppointment extends Activity implements OnClickListener{

    EditText nameTextBox;
    EditText timeTextBox;
    EditText detailsTextBox;
    Button createButton;
    Date date = new Date();
    Appointment getNewID;

    protected void onCreate(Bundle savedInstanceState) {

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

        createButton = (Button) findViewById(R.id.apptSave);
        nameTextBox = (EditText)findViewById(R.id.apptName);//Assign the global name box
        timeTextBox = (EditText)findViewById(R.id.apptTime);//Assign the global time box
        detailsTextBox = (EditText)findViewById(R.id.apptDetails);//Assign the global details box


        createButton.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){

        case R.id.apptSave:

            String getNewDate = date.toString();
            String getNewTitle = nameTextBox.getText().toString();
            String getNewTime = timeTextBox.getText().toString();
            String getNewDetails = detailsTextBox.getText().toString();

            DBHandler db = new DBHandler(this);
            db.addAppointment(new Appointment(getNewID.getID(), getNewDate, getNewTitle, getNewTime, getNewDetails));
            finish();
            break;

        }

    }

}

logcat 给了我这个:

03-20 11:24:50.800: E/AndroidRuntime(706): FATAL EXCEPTION: main
03-20 11:24:50.800: E/AndroidRuntime(706): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.calendar/com.example.calendar.CreateAppointment}: java.lang.NullPointerException
03-20 11:24:50.800: E/AndroidRuntime(706): Caused by: java.lang.NullPointerException
03-20 11:24:50.800: E/AndroidRuntime(706):  at com.example.calendar.CreateAppointment.<init>(CreateAppointment.java:25)

出现错误的行是这样的:

String getNewTitle = nameTextBox.getText().toString();

最佳答案

您在编辑文本中输入任何值之前先为其分配值。所以你必须将其移动到 onCreate 方法中。

 String getNewDate = date.toString();
    String getNewTitle = nameTextBox.getText().toString();
    String getNewTime = timeTextBox.getText().toString();
    String getNewDetails = detailsTextBox.getText().toString();

所以你的完整代码看起来像这样,

public class CreateAppointment extends Activity implements OnClickListener{

    EditText nameTextBox;
    EditText timeTextBox;
    EditText detailsTextBox;
    Button createButton;
    Date date = new Date();
    Appointment getNewID;

    protected void onCreate(Bundle savedInstanceState) {

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

        createButton = (Button) findViewById(R.id.apptSave);
        nameTextBox = (EditText)findViewById(R.id.apptName);//Assign the global name box
        timeTextBox = (EditText)findViewById(R.id.apptTime);//Assign the global time box
        detailsTextBox = (EditText)findViewById(R.id.apptDetails);//Assign the global details box

       String getNewDate = date.toString();
       String getNewTitle = nameTextBox.getText().toString();
       String getNewTime = timeTextBox.getText().toString();
       String getNewDetails = detailsTextBox.getText().toString();

        createButton.setOnClickListener(this);

    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){

        case R.id.apptSave:
            DBHandler db = new DBHandler(this);
            db.addAppointment(new Appointment(getNewID.getID(), getNewDate, getNewTitle, getNewTime, getNewDetails));
            finish();
            break;
        }
    }
}

或者您也可以将此代码放入按钮的点击事件中,例如,

@Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){

            case R.id.apptSave:

       String getNewDate = date.toString();
       String getNewTitle = nameTextBox.getText().toString();
       String getNewTime = timeTextBox.getText().toString();
       String getNewDetails = detailsTextBox.getText().toString();

                DBHandler db = new DBHandler(this);
                db.addAppointment(new Appointment(getNewID.getID(), getNewDate, getNewTitle, getNewTime, getNewDetails));
                finish();
                break;
            }
        }

关于java - NullPointerException 导致 Android 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22531710/

相关文章:

android - 在 surfaceChanged 中释放相机对象会导致强制关闭(空指针异常)

java - 用于在 ANDROID 中切换元素的 XML 或 JAVA 代码

java - 如何在java SWING面板中添加Scrollable(滚动条组件)复选框?

android - 如何为 Cordova 项目添加 "uses-permissions"标签到 AndroidManifest.xml?

android - RecyclerView 项目有时无法正确显示,直到我滚动(仅在 Genymotion 平板电脑上)

javascript - Phonegap AJAX URL 在 Android 设备上显示状态 404

java - JLabel 数组中的空指针异常

java - 有没有办法干净地删除 IntelliJ 中的项目?

java - 尝试使用 Microsoft Translator API 进行翻译时出现 unknownHostException

java - 无法调用方法,因为注入(inject)为 null