我有以下问题:我想将一个对象从一个活动包裹到另一个活动。
是这个对象:
public class Item implements Parcelable {
private int minimumAmountOfItems;
private String nameOfItem;
private int maximumAmountOfItems;
private int actualAmountOfItems;
public Item(int minimumAmountOfItems, String nameOfItem, int maximumAmountOfItems, int actualAmountOfItems){
this.minimumAmountOfItems = minimumAmountOfItems;
this.nameOfItem = nameOfItem;
this.maximumAmountOfItems = maximumAmountOfItems;
this.actualAmountOfItems = actualAmountOfItems;
}
使用以下可分配的编码内容:
@Override
public int describeContents() {
/*Necessary for the parcelable stuff; but not needed in about 99.9% of the cases (source: Stack Overflow)*/
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
/*Store the data in a parcelable object to communicate between Activities */
dest.writeInt(this.minimumAmountOfItems);
dest.writeString(this.nameOfItem);
dest.writeInt(this.maximumAmountOfItems);
dest.writeInt(this.actualAmountOfItems);
}
private Item(Parcel in){
/*Retrieve the data that was packaged before*/
this.minimumAmountOfItems = in.readInt();
this.nameOfItem = in.readString();
this.maximumAmountOfItems = in.readInt();
this.actualAmountOfItems = in.readInt();
}
public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>(){
/*This small part of code passes along the unmarshalled parcel and returns the next object.*/
@Override
public Item createFromParcel(Parcel in){
return new Item(in);
}
@Override
public Item[] newArray(int size){
return new Item[size];
}
};
因此,我在我的活动中使用以下代码来包裹我的对象:
resultIntent = new Intent(ItemCreatorActivity.this, ItemListEditorActivity.class);
resultIntent.putExtra("Item", item);
startActivity(resultIntent);
为了得到我想要实现的一切:
Intent inputIntent = getIntent();
Item passedItem = inputIntent.getExtras().getParcelable("Item");
System.out.println(passedItem.getNameOfItem());
现在我有几个问题:
1。)我如何检查,我是否从发件人到收件人获得有效的可分配信息? 我认为我已经从本教程中获得了关于可分配对象的所有重要内容:https://coderwall.com/p/vfbing/passing-objects-between-activities-in-android其他几个(由于可读性目的,我不会在这里发布它们,因为它们都描述了相同的过程和结构......) ;但仍然我的System.out.println(passedItem.getNameOfItem())不会抛出任何东西。我的AndroidMonitor中没有其他消息。
2.)当我没有创建Item对象时,我正在调用此活动一次。是否有更多&#34;光滑&#34;第一次调用活动时,在此代码中阻止nullpointerexception的方法是什么?
3。)当我按下一个按钮,切换到一个新的Activity,创建一个Item对象并想象一下,我的代码之前会有效,我可以将我的对象传递回调用Activity。我之前在调用Activity的ArrayList中保存的所有对象是否仍然可用,或者我是否必须将我的ArrayList传递给新的Activity然后返回到调用Activity?
提前感谢您的帮助。
祝你好运
答案 0 :(得分:1)
您正在意图中添加parcelable对象并从Bundle中检索它(inputIntent.getExtras()返回Bundle类型的对象)。
所以你需要把它改成inputIntent.getParcelableExtra(“Item”);
3。)当我按下一个按钮,切换到一个新的Activity,创建一个Item对象并想象一下,我的代码之前会有效,我可以将我的对象传递回调用Activity。我之前在调用Activity的ArrayList中保存的所有对象是否仍然可用,或者我是否必须将我的ArrayList传递给新的Activity然后返回到调用Activity?
是。您可以将ArrayList添加到intent对象:
ArrayList<Item> itemList = new ArrayList<Item>();
// Add elements to the list
intent.putParcelableArrayListExtra("Item_List", itemList);
并检索它:
ArrayList<Item> itemList = inputIntent.getParcelableArrayListExtra("Item_List");
答案 1 :(得分:1)
1。)我如何检查,我是否从发件人到收件人获得有效的可分配信息?我认为我已经从本教程中获得了关于可分配对象的所有重要内容:https://coderwall.com/p/vfbing/passing-objects-between-activities-in-android其他几个(由于可读性目的,我不会在这里发布它们,因为它们都描述了相同的过程和结构......) ;但仍然我的System.out.println(passedItem.getNameOfItem())不会抛出任何东西。我的AndroidMonitor中没有其他消息。
您可以通过
登录logcatLog.d("tag", passedItem.getNameOfItem());
并查看您的logcat。它应该打印出你的数据
2.)当我没有创建Item对象时,我正在调用此活动一次。是否有更多&#34;光滑&#34;第一次调用活动时,在此代码中阻止nullpointerexception的方法?
您可以在接收活动中执行此操作:
Bundle extras = getIntent().getExtras();
if (extras != null) {
Item passedItem = (Item) extras.getParcelable("Item");
}
3。)当我按下一个按钮,切换到一个新的Activity,创建一个Item对象并想象一下,我的代码之前会有效,我可以将我的对象传递回调用Activity。我之前在调用Activity的ArrayList中保存的所有对象是否仍然可用,或者我是否必须将我的ArrayList传递给新的Activity然后返回到调用Activity?
至于此,我会研究http://developer.android.com/training/basics/activity-lifecycle/recreating.html,它将教你如何重建活动并通过各州保存数据。