错误虽然传递对象从活动到另一个(使用Parcelable) [英] Error While Passing An Object From An Activity To Another (Using Parcelable)

查看:300
本文介绍了错误虽然传递对象从活动到另一个(使用Parcelable)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图传递一个对象类从活动到另一个使用Parcelable

我已经创建了一个类并将其命名为学生

 包com.example.test08_passobjectoverintent;进口android.os.Parcel;
进口android.os.Parcelable;公共类学生实现Parcelable
{    私人字符串st_AcadimicNumber;
    私人字符串st_Name;
    私人字符串st_Class;
    公共字符串getSt_AcadimicNumber(){
        返回st_AcadimicNumber;
    }
    公共无效setSt_AcadimicNumber(字符串st_AcadimicNumber){
        this.st_AcadimicNumber = st_AcadimicNumber;
    }
    公共字符串getSt_Name(){
        返回st_Name;
    }
    公共无效setSt_Name(字符串st_Name){
        this.st_Name = st_Name;
    }
    公共字符串getSt_Class(){
        返回st_Class;
    }
    公共无效setSt_Class(字符串st_Class){
        this.st_Class = st_Class;
    }    公益助学(字符串st_AcadimicNumber,字符串st_Name,字符串st_Class){
        超();
        this.st_AcadimicNumber = st_AcadimicNumber;
        this.st_Name = st_Name;
        this.st_Class = st_Class;
    }
公益助学(){
    超();
}
    @覆盖
    公众诠释describeContents(){
        // TODO自动生成方法存根
        返回0;
    }    @覆盖
    公共无效writeToParcel(DEST包裹,INT标志){
        // TODO自动生成方法存根    }}

在主要活动我使用这code要通过Obejct ...

 学生ST =新的学生(AAA,BBB,CCC);
                意向意图=新意图(MainActivity.this,Main2Activity.class);
                intent.putExtra(STU,ST);
                startActivity(意向);

在第二个活动(检索一个)

我用这个code(误差为HERE)

 学生模型=(学生)getIntent()getParcelableExtra(STU);

LogCat中错误

  15 12-09:50:06.068:E /跟踪(30655):错误打开跟踪文件:没有这样的文件或目录(2)
12-09 15:50:​​06.188:D / libEGL(30655):加载/system/lib/egl/libEGL_mali.so
12-09 15:50:​​06.188:D / libEGL(30655):加载/system/lib/egl/libGLESv1_CM_mali.so
12-09 15:50:​​06.193:D / libEGL(30655):加载/system/lib/egl/libGLESv2_mali.so
12-09 15:50:​​06.193:D /(30655):设备驱动程序API匹配
12-09 15:50:​​06.193:D /(30655):设备驱动程序API版本:10
12-09 15:50:​​06.193:D /(30655):用户空间API版本:10
12-09 15:50:​​06.193:D /(30655):马里:版本=的Linux r2p4-02rel0 BUILD_DATE =周三09月12日17点53分53秒KST 2012
12-09 15:50:​​06.218:D / OpenGLRenderer(30655):启用调试模式0
12-09 15:50:​​08.033:D / GestureDetector(30655):表面触摸事件] mSweepDown假,mLRSDCnt:-1 mTouchCnt:4 mFalseSizeCnt:0
12-09 15:50:​​08.123:D / AndroidRuntime(30655):关闭VM
12-09 15:50:​​08.123:W / dalvikvm(30655):主题ID = 1:螺纹未捕获的异常(组= 0x40e372a0)退出
12-09 15:50:​​08.128:E / AndroidRuntime(30655):致命异常:主要
12-09 15:50:​​08.128:E / AndroidRuntime(30655):了java.lang.RuntimeException:无法启动活动ComponentInfo{com.example.test08_passobjectoverintent/com.example.test08_passobjectoverintent.Main2Activity}: android.os.BadParcelableException:Parcelable协议要求号召类com.example.test08_passobjectoverintent.Student CREATOR一个Parcelable.Creator对象
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.app.ActivityThread.access $ 600(ActivityThread.java:140)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1227)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.os.Handler.dispatchMessage(Handler.java:99)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.os.Looper.loop(Looper.java:137)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.app.ActivityThread.main(ActivityThread.java:4898)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在java.lang.reflect.Method.invokeNative(本机方法)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在java.lang.reflect.Method.invoke(Method.java:511)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1008)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在dalvik.system.NativeStart.main(本机方法)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):android.os.BadParcelableException:致Parcelable协议要求号召类com.example.test08_passobjectoverintent.Student CREATOR一个Parcelable.Creator对象
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.os.Parcel.readParcelable(Parcel.java:2086)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.os.Parcel.readValue(Parcel.java:1965)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.os.Parcel.readMapInternal(Parcel.java:2226)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.os.Bundle.unparcel(Bundle.java:223)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.os.Bundle.getParcelable(Bundle.java:1165)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.content.Intent.getParcelableExtra(Intent.java:4451)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在com.example.test08_passobjectoverintent.Main2Activity.onCreate(Main2Activity.java:22)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.app.Activity.performCreate(Activity.java:5191)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
12-09 15:50:​​08.128:E / AndroidRuntime(30655):... 11个


解决方案

您需要执行code编写,并从包裹看了你的类字段。

writeToParcel

  @覆盖
公共无效writeToParcel(DEST包裹,INT标志){
      dest.writeString(st_AcadimicNumber);
      dest.writeString(st_Name);
      dest.writeString(st_Class);
}

包裹CREATOR:

 公共静态最终Parcelable.Creator<轨道> CREATOR
=新Parcelable.Creator<轨道>(){
    公益助学createFromParcel(包裹中){
        返回(在)的新轨道;
    }    公益助学[] newArray(INT大小){
        返回新的轨道【尺寸】;
    }
};

和构造器:

 公益助学(包裹源){
      / *
       *从包裹重建。保持相同的顺序writeToParcel()
       * /
      st_AcadimicNumber = source.readString();
      st_Name = source.readString();
      st_Class = source.readString();
}

和它的完成。

问候

I Tried To Pass An Object Class From An Activity To Another Using Parcelable

I've Create A Class And Name it Student

package com.example.test08_passobjectoverintent;

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

public class Student implements Parcelable
{

    private String st_AcadimicNumber ;
    private String st_Name ;
    private String st_Class ;
    public String getSt_AcadimicNumber() {
        return st_AcadimicNumber;
    }
    public void setSt_AcadimicNumber(String st_AcadimicNumber) {
        this.st_AcadimicNumber = st_AcadimicNumber;
    }
    public String getSt_Name() {
        return st_Name;
    }
    public void setSt_Name(String st_Name) {
        this.st_Name = st_Name;
    }
    public String getSt_Class() {
        return st_Class;
    }
    public void setSt_Class(String st_Class) {
        this.st_Class = st_Class;
    }   

    public Student(String st_AcadimicNumber, String st_Name, String st_Class) {
        super();
        this.st_AcadimicNumber = st_AcadimicNumber;
        this.st_Name = st_Name;
        this.st_Class = st_Class;
    }
public Student() {
    super();
}
    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub

    }

}

In The Main Activity I Use This Code To Pass The Obejct ...

                Student st = new Student("aaa","bbb","ccc");
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                intent.putExtra("stu", st);
                startActivity(intent);

In The Second Activity (Retrieve One)

I use This Code (ERROR IS HERE)

    Student model = (Student)getIntent().getParcelableExtra("stu");

LogCat Error

12-09 15:50:06.068: E/Trace(30655): error opening trace file: No such file or directory (2)
12-09 15:50:06.188: D/libEGL(30655): loaded /system/lib/egl/libEGL_mali.so
12-09 15:50:06.188: D/libEGL(30655): loaded /system/lib/egl/libGLESv1_CM_mali.so
12-09 15:50:06.193: D/libEGL(30655): loaded /system/lib/egl/libGLESv2_mali.so
12-09 15:50:06.193: D/(30655): Device driver API match
12-09 15:50:06.193: D/(30655): Device driver API version: 10
12-09 15:50:06.193: D/(30655): User space API version: 10 
12-09 15:50:06.193: D/(30655): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Wed Sep 12 17:53:53 KST 2012 
12-09 15:50:06.218: D/OpenGLRenderer(30655): Enabling debug mode 0
12-09 15:50:08.033: D/GestureDetector(30655): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 4 mFalseSizeCnt:0
12-09 15:50:08.123: D/AndroidRuntime(30655): Shutting down VM
12-09 15:50:08.123: W/dalvikvm(30655): threadid=1: thread exiting with uncaught exception (group=0x40e372a0)
12-09 15:50:08.128: E/AndroidRuntime(30655): FATAL EXCEPTION: main
12-09 15:50:08.128: E/AndroidRuntime(30655): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test08_passobjectoverintent/com.example.test08_passobjectoverintent.Main2Activity}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.example.test08_passobjectoverintent.Student
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.os.Looper.loop(Looper.java:137)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.app.ActivityThread.main(ActivityThread.java:4898)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at java.lang.reflect.Method.invokeNative(Native Method)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at java.lang.reflect.Method.invoke(Method.java:511)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at dalvik.system.NativeStart.main(Native Method)
12-09 15:50:08.128: E/AndroidRuntime(30655): Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.example.test08_passobjectoverintent.Student
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.os.Parcel.readParcelable(Parcel.java:2086)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.os.Parcel.readValue(Parcel.java:1965)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.os.Parcel.readMapInternal(Parcel.java:2226)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.os.Bundle.unparcel(Bundle.java:223)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.os.Bundle.getParcelable(Bundle.java:1165)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.content.Intent.getParcelableExtra(Intent.java:4451)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at com.example.test08_passobjectoverintent.Main2Activity.onCreate(Main2Activity.java:22)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.app.Activity.performCreate(Activity.java:5191)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
12-09 15:50:08.128: E/AndroidRuntime(30655):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
12-09 15:50:08.128: E/AndroidRuntime(30655):    ... 11 more

解决方案

You need to implement the code to write and read your class fields from parcel.

In writeToParcel:

@Override
public void writeToParcel(Parcel dest, int flags) {
      dest.writeString(st_AcadimicNumber);
      dest.writeString(st_Name);
      dest.writeString(st_Class);
}

The Parcel CREATOR:

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

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

And the constructor:

public Student (Parcel source){
      /*
       * Reconstruct from the Parcel. Keep same order as in writeToParcel()
       */
      st_AcadimicNumber = source.readString();
      st_Name = source.readString();
      st_Class = source.readString();
}   

And it's done.

Regards

这篇关于错误虽然传递对象从活动到另一个(使用Parcelable)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆