Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 传递具有对象列表的可包裹对象?_Java_Android - Fatal编程技术网

Java 传递具有对象列表的可包裹对象?

Java 传递具有对象列表的可包裹对象?,java,android,Java,Android,您好,我创建了一个类,它将“类的对象”列表、字符串列表和字符串发送到一个活动到另一个活动,对于“字符串和字符串列表”来说效果很好,但在发送“任何类的对象列表”时会产生错误 这是我的第一个活动 FirstActivity.java public class FirstActivity extends Activity { List<String> teachersName; SampleClass sampleClass; List<SampleClass> studen

您好,我创建了一个类,它将“类的对象”列表、字符串列表和字符串发送到一个活动到另一个活动,对于“字符串和字符串列表”来说效果很好,但在发送“任何类的对象列表”时会产生错误

这是我的第一个活动

FirstActivity.java

public class FirstActivity extends Activity {

List<String> teachersName;
SampleClass sampleClass;
List<SampleClass> studentDetails;

ParcebleDemo parcebleDemo;

Button button;

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

    teachersName = new ArrayList<>();
    studentDetails = new ArrayList<SampleClass>();

    teachersName.add("1111");
    teachersName.add("2222");
    teachersName.add("3333");
    teachersName.add("4444");
    teachersName.add("5555");

    for (int i = 0; i < 4; i++) {
        sampleClass = new SampleClass();
        sampleClass.name = "Raja" + " " + i;
        sampleClass.rollno = 63448 + (i * 10);
        studentDetails.add(sampleClass);
    }

    parcebleDemo = new ParcebleDemo();

    parcebleDemo.setAddress("koromangala");
    parcebleDemo.setTeacherName(teachersName);
    parcebleDemo.setSample(studentDetails);

    button =  (Button) findViewById(R.id.button);


    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Bundle bundle = new Bundle();
            bundle.putParcelable("Parceble", parcebleDemo);
            Intent intent =new Intent(FirstActivity.this, SecondActivity.class);
            intent.putExtras(bundle);
            startActivity(intent);

        }
    });
  }
}
public class SecondActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ParcebleDemo parcebleDemo =  getIntent().getExtras().getParcelable("Parceble");

    String address = parcebleDemo.getAddress();

    System.out.println("Address >> "+address);

    int sizeOfTeacher = parcebleDemo.getTeacherName().size();

    for (int i = 0; i < sizeOfTeacher; i++) {
        System.out.println("Teacher "+i+" >> "+ parcebleDemo.getTeacherName().get(i));
    }

    int sizeOfStudent = parcebleDemo.getSample().size();

    for (int i = 0; i < sizeOfStudent; i++) {
        System.out.println("StudentName "+i+" >> "+ parcebleDemo.getSample().get(i).name);
        System.out.println("StudentRoll "+i+" >> "+ parcebleDemo.getSample().get(i).rollno);
    }

  }
}
public class ParcebleDemo implements Parcelable {

private String address;
private List<String> teacherName;
private List<SampleClass> sample;

public ParcebleDemo() {
    sample = new ArrayList<SampleClass>();

    teacherName = new ArrayList<String>();
}

public ParcebleDemo(Parcel source) {
    readFromParcel(source);
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public List<String> getTeacherName() {
    return teacherName;
}

public void setTeacherName(List<String> teacherName) {
    this.teacherName = teacherName;
}

public List<SampleClass> getSample() {
    return sample;
}

public void setSample(List<SampleClass> sample) {
    this.sample = sample;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(address);
    dest.writeList(teacherName);
    dest.writeList(sample);

}

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

    @Override
    public ParcebleDemo createFromParcel(Parcel source) {
        return new ParcebleDemo(source);
    }

    @Override
    public ParcebleDemo[] newArray(int size) {
        return new ParcebleDemo[size];
    }
};

public void readFromParcel(Parcel source) {
    address = source.readString();

    source.readList(teacherName, null);

    source.readList(sample, SampleClass.class.getClassLoader());

  }

}
包含Parceble实现的类是:

ParcebleDemo.java

public class FirstActivity extends Activity {

List<String> teachersName;
SampleClass sampleClass;
List<SampleClass> studentDetails;

ParcebleDemo parcebleDemo;

Button button;

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

    teachersName = new ArrayList<>();
    studentDetails = new ArrayList<SampleClass>();

    teachersName.add("1111");
    teachersName.add("2222");
    teachersName.add("3333");
    teachersName.add("4444");
    teachersName.add("5555");

    for (int i = 0; i < 4; i++) {
        sampleClass = new SampleClass();
        sampleClass.name = "Raja" + " " + i;
        sampleClass.rollno = 63448 + (i * 10);
        studentDetails.add(sampleClass);
    }

    parcebleDemo = new ParcebleDemo();

    parcebleDemo.setAddress("koromangala");
    parcebleDemo.setTeacherName(teachersName);
    parcebleDemo.setSample(studentDetails);

    button =  (Button) findViewById(R.id.button);


    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Bundle bundle = new Bundle();
            bundle.putParcelable("Parceble", parcebleDemo);
            Intent intent =new Intent(FirstActivity.this, SecondActivity.class);
            intent.putExtras(bundle);
            startActivity(intent);

        }
    });
  }
}
public class SecondActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ParcebleDemo parcebleDemo =  getIntent().getExtras().getParcelable("Parceble");

    String address = parcebleDemo.getAddress();

    System.out.println("Address >> "+address);

    int sizeOfTeacher = parcebleDemo.getTeacherName().size();

    for (int i = 0; i < sizeOfTeacher; i++) {
        System.out.println("Teacher "+i+" >> "+ parcebleDemo.getTeacherName().get(i));
    }

    int sizeOfStudent = parcebleDemo.getSample().size();

    for (int i = 0; i < sizeOfStudent; i++) {
        System.out.println("StudentName "+i+" >> "+ parcebleDemo.getSample().get(i).name);
        System.out.println("StudentRoll "+i+" >> "+ parcebleDemo.getSample().get(i).rollno);
    }

  }
}
public class ParcebleDemo implements Parcelable {

private String address;
private List<String> teacherName;
private List<SampleClass> sample;

public ParcebleDemo() {
    sample = new ArrayList<SampleClass>();

    teacherName = new ArrayList<String>();
}

public ParcebleDemo(Parcel source) {
    readFromParcel(source);
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public List<String> getTeacherName() {
    return teacherName;
}

public void setTeacherName(List<String> teacherName) {
    this.teacherName = teacherName;
}

public List<SampleClass> getSample() {
    return sample;
}

public void setSample(List<SampleClass> sample) {
    this.sample = sample;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(address);
    dest.writeList(teacherName);
    dest.writeList(sample);

}

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

    @Override
    public ParcebleDemo createFromParcel(Parcel source) {
        return new ParcebleDemo(source);
    }

    @Override
    public ParcebleDemo[] newArray(int size) {
        return new ParcebleDemo[size];
    }
};

public void readFromParcel(Parcel source) {
    address = source.readString();

    source.readList(teacherName, null);

    source.readList(sample, SampleClass.class.getClassLoader());

  }

}
根据演示类自动生成的Parcelable实现,它应该如下所示:

public class ParcebleDemo implements Parcelable
{
    private String address;
    private List<String> teacherName;
    private List<SampleClass> sample;

    public ParcebleDemo() {
        sample = new ArrayList<SampleClass>();

        teacherName = new ArrayList<String>();
    }

    protected ParcebleDemo(Parcel in) 
    {
        address = in.readString();
        if (in.readByte() == 0x01) {
            teacherName = new ArrayList<String>();
            in.readList(teacherName, String.class.getClassLoader());
        } else {
            teacherName = null;
        }
        if (in.readByte() == 0x01) {
            sample = new ArrayList<SampleClass>();
            in.readList(sample, SampleClass.class.getClassLoader());
        } else {
            sample = null;
        }
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(address);
        if (teacherName == null) {
            dest.writeByte((byte) (0x00));
        } else {
            dest.writeByte((byte) (0x01));
            dest.writeList(teacherName);
        }
        if (sample == null) {
            dest.writeByte((byte) (0x00));
        } else {
            dest.writeByte((byte) (0x01));
            dest.writeList(sample);
        }
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<ParcebleDemo> CREATOR = new Parcelable.Creator<ParcebleDemo>() {
        @Override
        public ParcebleDemo createFromParcel(Parcel in) {
            return new ParcebleDemo(in);
        }

        @Override
        public ParcebleDemo[] newArray(int size) {
            return new ParcebleDemo[size];
        }
    };
}
公共类ParcebleDemo实现了Parcelable
{
私有字符串地址;
私人名单教师姓名;
私人名单样本;
公共公园{
示例=新的ArrayList();
teacherName=新的ArrayList();
}
受保护的地块bledemo(地块位于)
{
地址=in.readString();
if(in.readByte()==0x01){
teacherName=新的ArrayList();
in.readList(teacherName,String.class.getClassLoader());
}否则{
teacherName=null;
}
if(in.readByte()==0x01){
示例=新的ArrayList();
in.readList(sample,SampleClass.class.getClassLoader());
}否则{
样本=null;
}
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的地记录(地址);
if(teacherName==null){
目标写入字节((字节)(0x00));
}否则{
目标写入字节((字节)(0x01));
目的写作者(教师姓名);
}
if(sample==null){
目标写入字节((字节)(0x00));
}否则{
目标写入字节((字节)(0x01));
目的书面清单(样本);
}
}
@抑制警告(“未使用”)
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共地块Bledemo createFromParcel(地块中){
返回新的ParcebleDemo(in);
}
@凌驾
public ParcebleDemo[]新数组(整数大小){
返回新的ParcebleDemo[大小];
}
};
}

您是否为
SampleClass
实现了Parcelable?您不能执行
dest.writeList(示例)在sampleclass@shayan上发布您的代码是正确的您必须在sampleclass上实现Parcelable否我没有在sampleclass上实现Parcelble。公共类SampleClass{int rollno;String name;}谢谢,但我已经尝试过了,它显示了与前面相同的错误。在这种情况下,这是因为SampleClass没有实现
Parcelable
接口,将它扔到Parcelabler中,它就可以工作了。