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