[英]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.