ParcelableException:解组

时间:2017-06-30 11:47:24

标签: android parcelable

我将数据从一个活动发送到另一个活动来自不同的包。我应用意图发送和接收数据。 为了发送单值它的工作,但现在我想通过intent发送对象,所以我实现了Parcelable但是我得到的错误是找不到类。

这是我的代码.....

发件人方类: -

  

发件人MainActivity

public class MainActivity extends AppCompatActivity  {

    Button click;
    Student student = new Student(01,"Anjali");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        click = (Button)findViewById(R.id.app1);

        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent act = new Intent("com.gov.printer");
                act.putExtra("data",student);
                startActivity(act);
            }
        });
    }
}
  

学生发文人课程

public class Student implements Parcelable {

    int id;
    String name;

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public static Creator<Student> getCREATOR() {
        return CREATOR;
    }
    @Override
    public int describeContents() {
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
    }
    public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>()
    {

        @Override
        public Student createFromParcel(Parcel source) {
            return new Student(source);
        }
        @Override
        public Student[] newArray(int size) {
            return new Student[size];  }
    };
    private Student(Parcel in){
    }
}
  

接收方类: -

     

学生接收班

   public class Student implements Parcelable{

        int id;
        String name;

        public int get Id() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public static Creator<Student> getCREATOR() {
            return CREATOR;
        }
        @Override
        public int describeContents() {
            return 0;

        }
        @Override
        public void writeToParcel(Parcel dest, int flags) {
        }
        public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>()
        {

            @Override
            public Student createFromParcel(Parcel source) {
                return new Student(source);
            }
            @Override
            public Student[] newArray(int size) {
                return new Student[size];
            }
        };
        private Student(Parcel in){
            this.name = in.readString();
            this.id = in.readInt();
        }
    }
  

Receiver MainActivity

public class MainActivity extends AppCompatActivity {

    TextView getdata;
    String TAG ="Main";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getdata = (TextView)findViewById(R.id.textapp);
        Intent in = getIntent();
        if (in.getAction().equals("com.gov.printer"));
        {
            Student student = in.getParcelableExtra("data");
            Log.e(TAG,"data is"+student);
            getdata.setText("name:-" +student.getName()+"\n"
                    +"ID:- " +student.getId());
        }
    }

1 个答案:

答案 0 :(得分:0)

你可以这样实现

学生班:

package com.ex.utils;

import android.os.Parcel;
import android.os.Parcelable;

public class Student implements Parcelable {
    int id;
    String name;

    public Student(int id, String name) {
    this.id = id;
    this.name = name;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(this.id);
        dest.writeString(this.name);
    }

    public Student() {
    }

    protected Student(Parcel in) {
        this.id = in.readInt();
        this.name = in.readString();
    }

    public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
        @Override
        public Student createFromParcel(Parcel source) {
            return new Student(source);
        }

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

发信人:

Intent i = new Intent("");
i.putExtra("data", student);

接收器:

Student student = getIntent().getParcelableExtra("data");