使用 Intent 时传递数组数据为空
Posted
技术标签:
【中文标题】使用 Intent 时传递数组数据为空【英文标题】:Passing array data is null when using Intent 【发布时间】:2019-10-20 16:05:24 【问题描述】:我想在 2 个 activity
之间传递一个 arraylist
,但我遇到了问题
在FirstActivity
中ArrayList
不为空,但在SecondActivity
中为空,我不知道发生了什么
我的意图:
Intent intent = new Intent(mContext, NewContactActivity.class);
intent.putParcelableArrayListExtra("CONTACT_ARRAY", mData);
mContext.startActivity(intent);
我的SecondActivity:
Intent intent = getIntent();
ArrayList<Contact> lstContact = this.getIntent().getParcelableArrayListExtra("CONTACT_ARRAY");
edtPhone.setText(lstContact.get(0).getPhone());
我的联系班级:
public class Contact implements Parcelable
private String id;
private String Name;
private String Fname;
private String Phone;
private String Email;
public Contact(String id, String Name, String Fname, String Phone, String Email)
this.id = id;
this.Name = Name;
this.Fname = Fname;
this.Email = Email;
this.Phone = Phone;
public Contact(Parcel in)
this.id = in.readString();
this.Name = in.readString();
this.Fname = in.readString();
this.Email = in.readString();
this.Phone = in.readString();
//Getter
public String getId() return id;
public String getName()
return Name;
public String getFname()
return Fname;
public String getEmail()
return Email;
public String getPhone()
return Phone;
//Setter
public void setName(String name)
this.Name = name;
public void setFname(String fname)
Fname = fname;
public void setEmail(String email)
Email = email;
public void setPhone(String phone) Phone = phone;
@Override
public int describeContents()
return 0;
@Override
public void writeToParcel(Parcel dest, int flags)
dest.writeString(id);
dest.writeString(Name);
dest.writeString(Fname);
dest.writeString(Phone);
dest.writeString(Email);
public static final Parcelable.Creator<Contact> CREATOR = new Parcelable.Creator<Contact>()
public Contact createFromParcel(Parcel in)
return new Contact(in);
public Contact[] newArray(int size)
return new Contact[size];
;
我该如何解决这个问题? 非常感谢
【问题讨论】:
检查您在 SecondActivity 中的类型转换。 你能分享一下如何在列表中添加数据的代码 是的,我正在使用ContentResolver
和Cursor
获取联系人数据到联系人列表
@jasonmomoa 您是否尝试通过查看您通过意图发送的额外数据以及您在其他活动中获得什么来调试此问题?如果没有一个答案有效,你可以试试这个,这对我很有帮助。
@deepakkumar 我试图将一个字符串变量从FirstActivity
传递给SecondActivity
,这很完美,但使用ArrayList 不行。
【参考方案1】:
你必须传递数组列表而不是单个对象
ArrayList<Contact> lstContact = createContactList();
i.putParcelableArrayListExtra("CONTACT_ARRAY", (ArrayList) lstContact );
在第二次活动中
ciArr = (List) i.getParcelableArrayListExtra("CONTACT_ARRAY");
【讨论】:
【参考方案2】:将this.getIntent()
替换为您的intent
。你根本没有使用它。
【讨论】:
您确定您的mData
不为空吗?【参考方案3】:
您必须在构造函数和 writeToParcel 函数中保持相同的顺序。
@Override
public void writeToParcel(Parcel dest, int flags)
dest.writeString(id);
dest.writeString(Name);
dest.writeString(Fname);
dest.writeString(Email);
dest.writeString(Phone);
【讨论】:
【参考方案4】:试试下面的代码。
private void gotoNextActivity()
Intent intent=new Intent(this,NewContactActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("CONTACT_ARRAY", contactsList);
intent.putExtras(bundle);
startActivity(intent);
NewContactActivity.class
ArrayList<BeanClass> listFromActivity1=new ArrayList<>();
listFromActivity1=this.getIntent().getExtras().getParcelableArrayList("CONTACT_ARRAY");
if (listFromActivity1 != null)
Log.d("Contact List",""+listFromActivity1.toString());
【讨论】:
@@ 不工作,这种方式很好但我不知道为什么它仍然不工作 你能调试看看你的arraylist是否为空吗? 在 FirstActivity 中不为空,但在 SecondActivity 中为空。我不知道发生了什么?以上是关于使用 Intent 时传递数组数据为空的主要内容,如果未能解决你的问题,请参考以下文章