简体   繁体   English

NullPointerException使Android应用崩溃

[英]NullPointerException crashes android app

I keep on getting NullPointerException errors on my app whenever I launch the activity. 每当我启动活动时,我都会在我的应用程序上不断收到NullPointerException错误。 It just seems strange because everything is declared. 这似乎很奇怪,因为一切都已声明。

Here's my 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;

        }

    }

}

and logcat gives me this: 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)

the line with the error is this: 出现错误的行是这样的:

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

move 移动

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

inside onCreate , after findViewById onCreate ,在findViewById之后

You are accessing EditText before initializing it in onCreate() method. 您需要在onCreate()方法中对其进行初始化之前访问EditText。 You need to move following lines in to onCreate() method 您需要将以下几行移到onCreate()方法中

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);

    // move lines here 
    String getNewDate = date.toString();
    String getNewTitle = nameTextBox.getText().toString();
    String getNewTime = timeTextBox.getText().toString();
    String getNewDetails = detailsTextBox.getText().toString();
}

You are assigning the value of edit-text before entering any value inside it. 您要先分配edit-text的值,然后再在其中输入任何值。 So you have to move this inside onCreate method. 因此,您必须在onCreate方法中移动它。

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

So your full code would look something like this, 因此,您的完整代码应如下所示:

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;
        }
    }
}

or else you can also put this code in button's click event like, 否则您也可以将此代码放入按钮的click事件中,例如,

@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;
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM