错误虽然传递对象从活动到另一个(使用Parcelable) [英] Error While Passing An Object From An Activity To Another (Using Parcelable)
本文介绍了错误虽然传递对象从活动到另一个(使用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屋!
查看全文