Я использую 8 полей EditText из NewCard.xml, из которых я беру значения, и когда нажимается кнопка сохранения, я сохраняю значения в базе данных, в этом же процессе сохранения я пытаюсь получить значения и представить их в 8 различных текстовых полях в файле main.xml, и когда я нажимаю кнопку, я получаю FC из эмулятора, и в результате возникает ошибка java.lang.NullPointerException.
Если бы кто-нибудь мог мне помочь, это было бы здорово, поскольку я никогда не использовал базы данных, и это мое первое приложение для Android, и это единственное, что помогает мне завершить все это и опубликовать его на рынке, как бесплатное приложение.
Вот полный код из 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)); //this is the line reported when i get the error
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
}
Вот стек ошибок:
06-07 19:05:21.728: ERROR/AndroidRuntime(207): Uncaught handler: thread main exiting due to uncaught exception
06-07 19:05:21.788: ERROR/AndroidRuntime(207): java.lang.NullPointerException
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at com.test.android.bussinesscard.NewCard.showCard(NewCard.java:181)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at com.test.android.bussinesscard.NewCard.access$1(NewCard.java:143)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at com.test.android.bussinesscard.NewCard$2.onClick(NewCard.java:104)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.View.performClick(View.java:2364)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.View.onTouchEvent(View.java:4179)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.widget.TextView.onTouchEvent(TextView.java:6541)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.View.dispatchTouchEvent(View.java:3709)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.os.Handler.dispatchMessage(Handler.java:99)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.os.Looper.loop(Looper.java:123)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at android.app.ActivityThread.main(ActivityThread.java:4363)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at java.lang.reflect.Method.invokeNative(Native Method)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at java.lang.reflect.Method.invoke(Method.java:521)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-07 19:05:21.788: ERROR/AndroidRuntime(207): at dalvik.system.NativeStart.main(Native Method)