【问题标题】:Passing array data is null when using Intent使用 Intent 时传递数组数据为空
【发布时间】:2019-10-20 16:05:24
【问题描述】:

我想在 2 个 activity 之间传递一个 arraylist,但我遇到了问题

FirstActivityArrayList 不为空,但在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 中的类型转换。
  • 你能分享一下如何在列表中添加数据的代码
  • 是的,我正在使用ContentResolverCursor 获取联系人数据到联系人列表
  • @jasonmomoa 您是否尝试通过查看您通过意图发送的额外数据以及您在其他活动中获得什么来调试此问题?如果没有一个答案有效,你可以试试这个,这对我很有帮助。
  • @deepakkumar 我试图将一个字符串变量从FirstActivity 传递给SecondActivity,这很完美,但使用ArrayList 不行。

标签: android android-intent parcelable


【解决方案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 中为空。我不知道发生了什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2019-01-13
      • 2012-12-29
      • 1970-01-01
      • 2014-05-06
      相关资源
      最近更新 更多