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