我有一個活動,我將對象添加到實現Parcelable接口的ArrayList中。然後我通過捆綁將這個列表傳遞給另一個活動,但是當我嘗試在新活動中打印列表的大小時,出現以下錯誤:在活動之間傳遞ArrayList
java.lang.RuntimeException:無法恢復活動{com .example.test/com.example.test.SectionsActivity}:顯示java.lang.NullPointerException
這裏就是我添加到列表的第一個活動:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Toast.makeText(getApplicationContext(), l.getItemAtPosition(position).toString() + " added to order", Toast.LENGTH_SHORT).show();
// add clicked item to orderData....
MenuItem m = (MenuItem) l.getItemAtPosition(position);
// create new item
orderData.add(m);
subTotal += m.getPrice();
calc();
}
這是我第一次送活動數據通過意向:
confirmBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
b.putParcelable("order", orderData);
Intent i = new Intent(v.getContext(), SectionsActivity.class);
i.putExtra("data",b);
startActivity(i);
}
});
而這正是我試圖找回包和顯示尺寸的第二活動:
@Override
protected void onResume() {
super.onResume();
getIntentData();
}
public void getIntentData(){
Intent i = getIntent();
if(i != null & i.hasExtra("data")){
Toast.makeText(this.getApplicationContext(), "recieved", Toast.LENGTH_LONG).show();
b = i.getExtras();
orderData = b.getParcelable("order");
int size = orderData.size();
Toast.makeText(this.getApplicationContext(), String.valueOf(size), Toast.LENGTH_LONG).show();
}
}
任何爲什麼我收到了空指針的想法?這讓我生氣了!
orderData是MenuItemList對象:
public class MenuItemList extends ArrayList <MenuItem> implements Parcelable{
/**
*
*/
private static final long serialVersionUID = 2998684930374219271L;
public MenuItemList(){
}
public static final Parcelable.Creator<MenuItemList> CREATOR = new Parcelable.Creator<MenuItemList>() {
@Override
public MenuItemList createFromParcel(Parcel source) {
return new MenuItemList(source);
}
@Override
public MenuItemList[] newArray(int size) {
return new MenuItemList[size];
}
};
public MenuItemList(Parcel source) {
readFromParcel(source);
}
private void readFromParcel(Parcel source) {
this.clear();
//read the size of the list
int size = source.readInt();
//Remember order of items written into the Parcel. Important here.
for(int i = 0; i < size; i ++){
MenuItem item = new MenuItem();
item.setName(source.readString());
item.setPrice(source.readDouble());
this.add(item);
}
}
@Override
public void writeToParcel(Parcel dest, int flags) {
int size = this.size();
dest.writeInt(size);
for(int i = 0; i < size; i ++){
MenuItem item = this.get(i);
dest.writeString(item.getName());
dest.writeDouble(item.getPrice());
}
}
@Override
public int describeContents() {
return 0;
}
}
變化編寫一個解決的問題:
CHANGED的onClick(視圖v):
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(), SectionsActivity.class);
i.putExtra("data", (ArrayList<MenuItem>)orderData);
startActivity(i);
}
CHANGED getIntent( ):
public void getIntentData(){
Intent i = getIntent();
if(i != null && i.hasExtra("data")){
Toast.makeText(this.getApplicationContext(), "recieved", Toast.LENGTH_LONG).show();
orderData = i.getParcelableExtra("data");
int size = orderData.size();
Toast.makeText(this.getApplicationContext(), String.valueOf(size), Toast.LENGTH_LONG).show();
}
}
我很好奇,爲什麼這個問題得到了-1?這對於至少發佈相關代碼,適當標籤和一些logcat的新用戶來說是令人沮喪的。清楚地解釋問題並顯示努力......令人失望。 +1給你Javacadabra – codeMagic
@codeMagic謝謝你的支持評論! – Javacadabra
不客氣,但這就是這個網站是關於。我剛開始的時候問過更糟糕的問題,但是由於SO社區的支持,我在過去9個月左右學到了很多東西。不要讓消極的人讓你失望,或讓你不要問問題,只要你展示研究成果。我很高興你解決了你的問題。 – codeMagic