【问题标题】:ParcelableException: ClassNotFoundException when unmarshallingParcelableException:解组时出现 ClassNotFoundException
【发布时间】:2017-06-30 11:47:23
【问题描述】:

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

这是我的代码.....

发送方类:-

发件人主活动

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();
        }
    }

接收者 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());
        }
    }

【问题讨论】:

标签: android parcelable


【解决方案1】:

你可以这样实现

学生班:

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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-17
    • 2013-03-08
    • 2013-03-04
    • 2012-01-16
    • 2011-08-28
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多