I get java.lang.NullPointerException when trying to get the contents of the database in Android
- by ncountr
I am using 8 EditText boxes from the NewCard.xml from which i am taking the values and when the save button is pressed i am storing the values into a database, in the same process of saving i am trying to get the values and present them into 8 different TextView boxes on the main.xml file and when i press the button i get an FC from the emulator and the resulting error is java.lang.NullPointerException.
If Some 1 could help me that would be great, since i have never used databases and this is my first application for android and this is the only thing keepeng me to complete the whole thing and publish it on the market like a free app.
Here's the full code from NewCard.java.
public class NewCard extends Activity
{
private static String[] FROM = { _ID, FIRST_NAME, LAST_NAME, POSITION, POSTAL_ADDRESS, PHONE_NUMBER, FAX_NUMBER, MAIL_ADDRESS, WEB_ADDRESS};
private static String ORDER_BY = FIRST_NAME;
private CardsData cards;
EditText First_Name;
EditText Last_Name;
EditText Position;
EditText Postal_Address;
EditText Phone_Number;
EditText Fax_Number;
EditText Mail_Address;
EditText Web_Address;
Button New_Cancel;
Button New_Save;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.newcard);
cards = new CardsData(this);
//Define the Cancel Button in NewCard Activity
New_Cancel = (Button) this.findViewById(R.id.new_cancel_button);
//Define the Cancel Button Activity/s
New_Cancel.setOnClickListener
(
new OnClickListener()
{
public void onClick(View arg0)
{
NewCancelDialog();
}
}
);//End of the Cancel Button Activity/s
//Define the Save Button in NewCard Activity
New_Save = (Button) this.findViewById(R.id.new_save_button);
//Define the EditText Fields to Get Their Values Into the Database
First_Name = (EditText) this.findViewById(R.id.new_first_name);
Last_Name = (EditText) this.findViewById(R.id.new_last_name);
Position = (EditText) this.findViewById(R.id.new_position);
Postal_Address = (EditText) this.findViewById(R.id.new_postal_address);
Phone_Number = (EditText) this.findViewById(R.id.new_phone_number);
Fax_Number = (EditText) this.findViewById(R.id.new_fax_number);
Mail_Address = (EditText) this.findViewById(R.id.new_mail_address);
Web_Address = (EditText) this.findViewById(R.id.new_web_address);
//Define the Save Button Activity/s
New_Save.setOnClickListener
(
new OnClickListener()
{
public void onClick(View arg0)
{
//Add Code For Saving The Attributes Into The Database
try
{
addCard(First_Name.getText().toString(), Last_Name.getText().toString(),
Position.getText().toString(), Postal_Address.getText().toString(),
Integer.parseInt(Phone_Number.getText().toString()),
Integer.parseInt(Fax_Number.getText().toString()),
Mail_Address.getText().toString(), Web_Address.getText().toString());
Cursor cursor = getCard();
showCard(cursor);
}
finally
{
cards.close();
NewCard.this.finish();
}
}
}
);//End of the Save Button Activity/s
}
//======================================================================================//
//DATABASE FUNCTIONS
private void addCard(String firstname, String lastname, String position, String postaladdress,
int phonenumber, int faxnumber, String mailaddress, String webaddress)
{
// Insert a new record into the Events data source.
// You would do something similar for delete and update.
SQLiteDatabase db = cards.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(FIRST_NAME, firstname);
values.put(LAST_NAME, lastname);
values.put(POSITION, position);
values.put(POSTAL_ADDRESS, postaladdress);
values.put(PHONE_NUMBER, phonenumber);
values.put(FAX_NUMBER, phonenumber);
values.put(MAIL_ADDRESS, mailaddress);
values.put(WEB_ADDRESS, webaddress);
db.insertOrThrow(TABLE_NAME, null, values);
}
private Cursor getCard()
{
// Perform a managed query. The Activity will handle closing
// and re-querying the cursor when needed.
SQLiteDatabase db = cards.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, FROM, null, null, null, null, ORDER_BY);
startManagingCursor(cursor);
return cursor;
}
private void showCard(Cursor cursor)
{
// Stuff them all into a big string
long id = 0;
String firstname = null;
String lastname = null;
String position = null;
String postaladdress = null;
long phonenumber = 0;
long faxnumber = 0;
String mailaddress = null;
String webaddress = null;
while (cursor.moveToNext())
{
// Could use getColumnIndexOrThrow() to get indexes
id = cursor.getLong(0);
firstname = cursor.getString(1);
lastname = cursor.getString(2);
position = cursor.getString(3);
postaladdress = cursor.getString(4);
phonenumber = cursor.getLong(5);
faxnumber = cursor.getLong(6);
mailaddress = cursor.getString(7);
webaddress = cursor.getString(8);
}
// Display on the screen add for each textView
TextView ids = (TextView) findViewById(R.id.id);
TextView fn = (TextView) findViewById(R.id.firstname);
TextView ln = (TextView) findViewById(R.id.lastname);
TextView pos = (TextView) findViewById(R.id.position);
TextView pa = (TextView) findViewById(R.id.postaladdress);
TextView pn = (TextView) findViewById(R.id.phonenumber);
TextView fxn = (TextView) findViewById(R.id.faxnumber);
TextView ma = (TextView) findViewById(R.id.mailaddress);
TextView wa = (TextView) findViewById(R.id.webaddress);
ids.setText(String.valueOf(id));
fn.setText(String.valueOf(firstname));
ln.setText(String.valueOf(lastname));
pos.setText(String.valueOf(position));
pa.setText(String.valueOf(postaladdress));
pn.setText(String.valueOf(phonenumber));
fxn.setText(String.valueOf(faxnumber));
ma.setText(String.valueOf(mailaddress));
wa.setText(String.valueOf(webaddress));
}
//======================================================================================//
//Define the Dialog that alerts you when you press the Cancel button
private void NewCancelDialog()
{
new AlertDialog.Builder(this)
.setMessage("Are you sure you want to cancel?")
.setTitle("Cancel")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
NewCard.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
})
.show();
}//End of the Cancel Dialog
}