Я работаю над Android-приложением, которое хранит контактную информацию. Я пытаюсь добавить функцию, которая при нажатии на элемент контакта в ListView отправит контактный объект который реализует более чем два вторых действия.Parcelable object, который получает переданные данные, заканчивается null
Это место, где я отправляю контактный объект в «Контакты». `
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
final Contact item = (Contact) getListAdapter().getItem(position);
Intent updateIntent = new Intent(MainActivity.this, ContactsActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("contact", item);
updateIntent.putExtra(ContactsActivity.RECIVED_CONTACT, bundle);
startActivityForResult(updateIntent,1);
adapter.notifyDataSetChanged();
}`
Это в OnCreate из контактов Активность класса, это будет проверять, чтобы увидеть, если какие-либо данные передавались с помощью RECIVED_CONTACT тег. Линия, где у меня есть объект типа Parcelable, где у меня есть ошибки, я получаю исключение с нулевым указателем.
if (getIntent().getParcelableExtra(ContactsActivity.RECIVED_CONTACT) != null) {
//This line is where the exception ouccurs
Parcelable receivedContact = getIntent().getParcelableExtra("contact");
updateContact(receivedContact);
}
Мой Контакт объект выглядит следующим образом
public class Contact implements Parcelable {
String firstName;
String lastName;
String email;
String phone;
/**
* Constructor
*/
public Contact(String firstName, String lastName, String email, String phone) {
// TODO Auto-generated constructor stub
this();
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phone = phone;
}
public Contact(Parcel parcel) {
this.firstName = parcel.readString();
this.lastName = parcel.readString();
this.email = parcel.readString();
this.phone = parcel.readString();
}
// this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
public static final Parcelable.Creator<Contact> CREATOR = new Parcelable.Creator<Contact>() {
public Contact createFromParcel(Parcel in) {
//return new Contact(in);
Contact mContact = new Contact();
mContact.firstName = in.readString();
mContact.lastName = in.readString();
mContact.email = in.readString();
mContact.phone = in.readString();
return mContact;
}
public Contact[] newArray(int size) {
return new Contact[size];
}
};
public Contact() {
// TODO Auto-generated constructor stub
}
/**
* @return the firstName
*/
public String getFirstName() {
return firstName;
}
/**
* @return the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @return the email
*/
public String getEmail() {
return email;
}
/**
* @return the phone
*/
public String getPhone() {
return phone;
}
public String toString() {
return firstName + " \n" + lastName + " \n"
+ email + " \n" + phone + " \n\n";
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
// write your object's data to the passed-in Parcel
public void writeToParcel(Parcel out, int flags) {
out.writeString(firstName);
out.writeString(lastName);
out.writeString(email);
out.writeString(phone);
}
}
я не был в состоянии понять, как это исправить, так что если вы хотите увидеть больше моего кода просто спросив, и я отправлю его , Я мало знаю о Parcelable объектах, и я думаю, именно поэтому я изо всех сил пытался это сделать.
Однако, когда я нажал кнопку добавления в MainActivity, можно было запустить вторую ContactActivity с некоторыми полями EditText для добавления имен и фамилий, электронной почты и телефона. Затем я помещал каждую из этих четырех строк в объект Contact и отправьте его обратно в основной вид деятельности, который будет отображаться. Я не разместил ни одного из этих кодов здесь, потому что этот код работает. Я не могу понять, как обновить один из объектов Contact, уже находящихся в ListView.
Я хочу, чтобы объект контакта, выбранный из ListView, отправил его в ContactActivity и поместил каждую из четырех строк данных в поля editText.
Какая линия вызывает NullPointerException? –
Исправлено: полученоКонтакт = getIntent(). GetParcelableExtra («контакт»); – DonTheAccountant