jPratas
jPratas

Reputation: 215

NullPointerException crashes android app

I keep on getting NullPointerException errors on my app whenever I launch the activity. 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:

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

Upvotes: 0

Views: 135

Answers (3)

InnocentKiller
InnocentKiller

Reputation: 5234

You are assigning the value of edit-text before entering any value inside it. So you have to move this inside onCreate method.

 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,

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

Upvotes: 1

Lucifer
Lucifer

Reputation: 29670

You are accessing EditText before initializing it in onCreate() method. You need to move following lines in to onCreate() method

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

Upvotes: 1

Blackbelt
Blackbelt

Reputation: 157487

move

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

inside onCreate, after findViewById

Upvotes: 1

Related Questions