Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在活动之间传递多个对象(使用parcelable)_Java_Android - Fatal编程技术网

Java 在活动之间传递多个对象(使用parcelable)

Java 在活动之间传递多个对象(使用parcelable),java,android,Java,Android,所以我要做的是将ObjectB从第一个活动传递到第二个活动。ObjectB包含另一个对象ObjectA。对于如何实现这一点,我感到非常困惑。另外,我在ObjectA中使用了一个列表,因为我将有多个整数值,而不是本例中的1。以下是第一项活动: private ObjectB objB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

所以我要做的是将ObjectB从第一个活动传递到第二个活动。ObjectB包含另一个对象ObjectA。对于如何实现这一点,我感到非常困惑。另外,我在ObjectA中使用了一个列表,因为我将有多个整数值,而不是本例中的1。以下是第一项活动:

private ObjectB objB;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    objB = new ObjectB();
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("KEY", objB);
    startActivity(intent);
}
private ObjectB objB;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    objB = new ObjectB();
    TextView tv = (TextView) findViewById(R.id.TextView1);
    Bundle b = getIntent().getExtras();
    objB = b.getParcelable("KEY");

    tv.setText(objB.obj.stage1Count);
}
第二项活动:

private ObjectB objB;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    objB = new ObjectB();
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("KEY", objB);
    startActivity(intent);
}
private ObjectB objB;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    objB = new ObjectB();
    TextView tv = (TextView) findViewById(R.id.TextView1);
    Bundle b = getIntent().getExtras();
    objB = b.getParcelable("KEY");

    tv.setText(objB.obj.stage1Count);
}
对象B的类:

public class ObjectB implements Parcelable{
    public ObjectA obj;

    public ObjectB() { obj = new ObjectA(); }

    public ObjectA getObj() {
        return obj;
    }

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

    public void setObj(ObjectA obj) {
        this.obj = obj;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(obj, flags);
    }

    private void readFromParcel(Parcel in) {
        obj = in.readParcelable(ObjectA.class.getClassLoader());
    }

    public static final Parcelable.Creator CREATOR =
        new Parcelable.Creator() {
            public ObjectB createFromParcel(Parcel in) {
                return new ObjectB(in);
            }

            public ObjectB[] newArray(int size) {
                return new ObjectB[size];
            }
        };
}
对象A的类:

public class ObjectA implements Parcelable{
    public int stage1Count = 1;

    public ObjectA() { ; };

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

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        List<Integer> iList = new ArrayList<Integer>();

        iList.add(stage1Count);
        dest.writeList(iList);
    }

    private void readFromParcel(Parcel in) {
        List<Integer> iList = new ArrayList<Integer>();

        iList = in.readArrayList(Integer.class.getClassLoader());
        stage1Count = iList.get(0);
    }

    public static final Parcelable.Creator CREATOR =
        new Parcelable.Creator() {
            public ObjectA createFromParcel(Parcel in) {
                return new ObjectA(in);
            }

            public ObjectA[] newArray(int size) {
                return new ObjectA[size];
            }
        };
}
公共类ObjectA实现了Parcelable{
公共int stage1计数=1;
公共对象a(){;};
公共物体A(包裹内){
从包裹中读取;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
List iList=new ArrayList();
添加(阶段1计数);
目的写入列表(iList);
}
private void readFromParcel(地块位于中){
List iList=new ArrayList();
iList=in.readArrayList(Integer.class.getClassLoader());
stage1Count=iList.get(0);
}
公共静态最终包裹。创建者=
新建Parcelable.Creator(){
公共对象A createFromParcel(中的地块){
返回新的ObjectA(in);
}
公共对象A[]新数组(整数大小){
返回新的ObjectA[size];
}
};
}

这是一个非常愚蠢的问题,但我在很长一段时间后才明白,哈哈。问题是
tv.setText(objB.obj.stage1Count)因为objB.obj.stage1Count实际上是一个整数,但由于某些原因,当您尝试将其用作字符串时,它不会发出任何响声,idk可能与包裹有关。

请在第一个活动中尝试以下操作:

List<ObjectB> list = new ArrayList<ObjectB>;    
intent.putParcelableArrayListExtra("key", list);
List List=newarraylist;
意图。putParcelableArrayListExtra(“键”,列表);
在第二个活动中

List<ObjectB> list = new ArrayList<ObjectB>;
list = bundle.getParcelableArrayList("key");
List List=newarraylist;
列表=bundle.getParcelableArrayList(“键”);
从列表中获取您的objectB