1

我试图将Parcelable实现为一些对象时遇到了困难。到目前为止,我有一个包含所有String和整型变量的Project类以及另一个名为ParcelableProject的对象,其中包含一个Project类。当我尝试通过AllProjects的名称创建另一个Parcelable类时,我的困难就开始了,这个类包含一个由ParcelableProject对象组成的单个数组列表。如何访问Parcelable对象内的ArrayList元素?

我有这样的方法,通过它我谨项目通过意向:

public void addProject(ParcelableProject p){ 
     Intent i = new Intent(this.getActivity(), ProjectsFragment.class); 
     ArrayList<ParcelableProject> data = new ArrayList<ParcelableProject>(); 
     data.add(p); 
     i.putParcelableArrayListExtra("projects", data); 

    } 

而且,在我的ProjectsFragment我尝试通过访问此ArrayList的数据:

Intent i = getActivity().getIntent(); 
    Bundle data=i.getExtras(); 
    ArrayList Projects= data.getParcelable("projects"); 
    ParcelableProject pProj=Projects.get(0); 

但它给了我一个“无法从Object转换为ParcelableProject“错误。访问我的项目变量的正确方法是什么?将有一个列表传入我的ProjectsFragment,因此Parcelable需要包含一个ArrayList的项目,我只是不知道如何访问各个项目。

+0

这也引发了我一个NullPointerException在ArrayList的项目= data.getParcelable( “项目”)。 – yanki

回答

0

做这样

Intent i = getIntent(); 
    Bundle data=i.getExtras(); 
    ArrayList<ParcelableProject> Projects= (ArrayList<ParcelableProject>) data.getParcelable("projects"); 

UPDATE试试这个

ArrayList<ParcelableProject> Projects= (ArrayList<ParcelableProject>) data.getParcelableArrayList("projects"); 
+0

我做过了,但我仍然在Projects =(ArrayList )data.getParcelable(“projects”)中得到NullPointerException; – yanki

0

试试这个

public class EmployeeData implements Parcelable { 

String empName; 
String empId; 
String empAddress; 

public EmployeeData(Parcel in) { 
    readFromParcel(in); 
} 

public EmployeeData(String name, String id, String address) { 

    this.empName = name; 
    this.empId = id; 
    this.empAddress = address; 
} 

@Override 
public int describeContents() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

private void readFromParcel(Parcel in) { 

    empName = in.readString(); 
    empId = in.readString(); 
    empAddress = in.readString(); 

} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    // TODO Auto-generated method stub 
    dest.writeString(empName); 
    dest.writeString(empId); 
    dest.writeString(empAddress); 

} 

public static final Parcelable.Creator<EmployeeData> CREATOR = new Creator<EmployeeData>() { 

    @Override 
    public EmployeeData[] newArray(int size) { 
     // TODO Auto-generated method stub 
     return new EmployeeData[size]; 
    } 

    @Override 
    public EmployeeData createFromParcel(Parcel source) { 
     // TODO Auto-generated method stub 
     return new EmployeeData(source); 
    } 
}; 

public String getEmpName() { 
    return empName; 
} 

public void setEmpName(String empName) { 
    this.empName = empName; 
} 

public String getEmpId() { 
    return empId; 
} 

public void setEmpId(String empId) { 
    this.empId = empId; 
} 

public String getEmpAddress() { 
    return empAddress; 
} 

public void setEmpAddress(String empAddress) { 
    this.empAddress = empAddress; 
} 

} 

认沽对象,如:

EmployeeData empData = new EmployeeData(name, id, address); 

      Bundle bundle = new Bundle(); 
      bundle.putParcelable("DATA", empData); 

      Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
      intent.putExtras(bundle); 

GET对象,如:

EmployeeData empData = getIntent().getParcelableExtra("DATA"); 
+0

我正在使用Fragments,当我制作新的Intent时,我的两个变量是this.getActivity()和Fragment.class。我不确定第二个变量是否会起作用,还是应该尝试创建新的活动? – yanki

+0

第二个变量也应该工作..尝试一次 – Sonali8890

+0

我有,它仍然抛出一个NullPointerException OnCreate()的ItemsFragment – yanki