Почему не передаётся объект через intent?

237
17 марта 2018, 17:15

Подскажите, пожалуйста, почему не передаётся объект contact?

public class RVAdapter extends 
RecyclerView.Adapter<RVAdapter.ContactsViewHolder> {
private ArrayList<Contact> contact;
private Context context;
private int position;
public RVAdapter(ArrayList<Contact> contact, Context context) {
    this.contact = contact;
    this.context = context;
}
public ContactsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false);
    return new ContactsViewHolder(view);
}
public void onBindViewHolder(ContactsViewHolder holder, int position) {
    this.position = position;
    final Contact person = contact.get(position);

    holder.setRecord(person);
    holder.textName.setText(person.getName());
    holder.textPhone.setText(person.getPhone());
    holder.textBirhday.setText(person.getBirthday());
    holder.cv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(view.getContext(), Info.class);
            intent.putExtra("IDsent", person.getId());
            intent.putExtra("person",person);

            Log.d("Отправил", String.valueOf(person));

            view.getContext().startActivity(intent);
        }
    });
}
@Override
public int getItemCount() {
    return contact.size();
}
class ContactsViewHolder extends RecyclerView.ViewHolder {
    TextView textName, textPhone, textBirhday;
    CardView cv;
    Contact contact;
    public ContactsViewHolder(View itemView) {
        super(itemView);
        textName = itemView.findViewById(R.id.card_name);
        textPhone = itemView.findViewById(R.id.card_phone);
        textBirhday = itemView.findViewById(R.id.card_birthday);
        cv = itemView.findViewById(R.id.card_view);

    }
    public void setRecord(Contact contact) {
        this.contact = contact;
    }
}

}

public class Info extends AppCompatActivity {
public Button delite, change;
EditText editName, editPhone, editDR;
//public ArrayList<Contact> contact;
Contact contact;
int id;

public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_info);
    initView();
    //contact = getIntent().getParcelableArrayListExtra("person");
    id = getIntent().getIntExtra("IDsent", id);
    contact = getIntent().getParcelableExtra("person"); //person  IDsent
    Log.d("ПРИНЯЛ", String.valueOf(contact));
    try{
        delite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContactHelper ch = new ContactHelper(getApplicationContext());
                String c = String.valueOf(contact);
                //ch.delete(contact.getId());
                Log.d("ПРИНЯЛ", String.valueOf(id));

                Intent intent = new Intent(Info.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }catch (Exception e){
        Log.d("ERROR", e.getMessage());
    }
    change.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ContactHelper ch = new ContactHelper(getApplicationContext());
            Intent intent = new Intent(Info.this, MainActivity.class);
            startActivity(intent);
        }
    });
}
void initView(){
    delite = findViewById(R.id.delite_btn);
    change = findViewById(R.id.change);
    editName = findViewById(R.id.editName);
    editPhone = findViewById(R.id.editNumber);
    editDR = findViewById(R.id.editBirthday);
}

}

public class Contact implements Parcelable {
public int id;
private String name;
private String phone;
private String birthday;
public Contact(int id, String name, String phone, String birthday) {
    this.id = id;
    this.name = name;
    this.phone = phone;
    this.birthday = birthday;
}

protected Contact(Parcel in) {
    id = in.readInt();
    name = in.readString();
    phone = in.readString();
    birthday = in.readString();
}
public static final Parcelable.Creator<Contact> CREATOR = new Parcelable.Creator<Contact>() {
    @Override
    public Contact createFromParcel(Parcel in) {
        return new Contact(in);
    }
    @Override
    public Contact[] newArray(int size) {
        return new Contact[size];
    }
};

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getPhone() {
    return phone;
}
public void setPhone(String phone) {
    this.phone = phone;
}
public String getBirthday() {
    return birthday;
}
public void setBirthday(String birthday) {
    this.birthday = birthday;
}
@Override
public String toString() {
    return "Contact{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", phone='" + phone + '\'' +
            ", birthday='" + birthday + '\'' +
            '}'+"\n";
}
@Override
public int describeContents() {
    return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}

}

Вот что выдаёт в лог

 03-16 21:30:56.050 6687-6687/com.example.buroroll.homeworkdb D/Отправил: Contact{id=5, name='Имя контакта', phone='Телефон', birthday='Дата ДР'}
 03-16 21:30:56.237 6687-6687/com.example.buroroll.homeworkdb D/ПРИНЯЛ: Contact{id=0, name='null', phone='null', birthday='null'}
Answer 1

writeToParcel забыли реализовать:

   @Override
   public void writeToParcel(Parcel dest, int flags) {
       dest.writeInt(this.id);
       dest.writeString(this.name);
       dest.writeString(this.phone);
       dest.writeString(this.birthday);
   }
READ ALSO
Open gl вопрос про текстурирование

Open gl вопрос про текстурирование

Здравствуйте, в интернете так и не смог найти на на такой вопрос ответ: Считываю obj файл, по нему формирую модель, вывожу на экран - все отлично...

246
Андроид. Всплывающий снизу меню

Андроид. Всплывающий снизу меню

Очень понравилась красивая меню в приложении StacExchange которое всплывает снизу когда нажимаешь на кнопку archivements сверхуКак такое же реализовать

186
Как словить эвент другого класса и передать из него объект?

Как словить эвент другого класса и передать из него объект?

Имеется контроллер AddlistОн вызывается из главного окна и осуществляет добавление нового Tab в TabPane контроллера другого класса: ManageLists

188
Как подключить компилятор Java к CodeBlocks?

Как подключить компилятор Java к CodeBlocks?

В 17 версии CodeBlocks появились шаблоны проектов и файлов на Java (вроде бы в 16-м ещё не было)Но в списке поддерживаемых компиляторов я не нашёл ничего...

279