Articles of parcelable

还原视图当解组父视图SavedState时,SavedState会抛出ClassNotFoundException

我有2个类ParentClass和ChildClass : ParentClass是RelativeLayout的子类,它使用onSaveInstanceState()/ onRestoreInstanceState()使用以下代码保存状态: @Override protected Parcelable onSaveInstanceState() { SavedState savedState = new SavedState(super.onSaveInstanceState()); savedState.someObj = someObj; savedState.someInt = someInt; savedState.someEnum = someEnum; return savedState; } @Override protected void onRestoreInstanceState(Parcelable in) { if (!(in instanceof SavedState)) { super.onRestoreInstanceState(in); return; } SavedState savedState = (SavedState) in; super.onRestoreInstanceState(savedState.getSuperState()); this.someObj = savedState.someObj; this.someInt = savedState.someInt; this.someEnum = savedState.someEnum; […]

获取NullPointerException:尝试在Android中读取字节数组时尝试在Parcelable中获取空数组的长度

我有一个实现Parcelable的类。 我的所有值都是通过writeToParcel方法设置的,但是当在构造函数中读取时,我遇到了一个抛出NullPointerException的字节数组的问题: public final class Product implements Parcelable { private Integer ID; private byte[] image; // Constructors public Product(){} public Product(Parcel source) { this.ID = source.readInt(); source.readByteArray(this.image); } public int describeContents() { return this.hashCode(); } public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.ID); dest.writeByteArray(this.image); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public […]

嵌套Parcelling:RuntimeException – 在偏移440处解组未知types代码3211319

我需要将一些数据发送到Activity ,它可能在不同的上下文中运行。 为此,我创建了一个类A,它有一个数据types的ArrayList ,说B作为实例成员之一。 我将B类声明为A类的内部类。 为了通过Intent发送这个A类的实例,我使A类和B类都成为Parcelable 。 类结构是这样的(这不包括完整的代码,例如为使类Parcelable编写的代码): public class A implements Parcelable{ public class B implements Parcelable{ public ArrayList value; …. …. public void writeToParcel(Parcel dest, int flags) { dest.writeList(value); } …. …. } public List group; public String name; …. …. public void writeToParcel(Parcel dest, int flags) { dest.writeList(group); dest.writeString(name); } …. …. […]

AIDL中的parcelize注释:不兼容的types:无法将对象转换为MyCustomObject

我正在将我的模型类重写为Kotlin ,它必须是Parcelable并在AIDL : @Parcelize data class MyCustomObject(val value1: String, val value2: String) : Parcelable 在编译期间,它崩溃并出现错误: 错误:不兼容的types:对象无法转换为MyCustomObject 并在生成的代码中指向此行: if ((0!=_reply.readInt())) { _result = com.mypackagename.MyCustomObject.CREATOR.createFromParcel(_reply); } 我将这个注释用于其他目的并且没关系,仅在AIDL中我发现到目前为止不匹配。 有什么想法有什么不对吗? 编辑:5天后没有任何评论,我已经为这个问题创建了一张票 。

如果通过Bundle传递给Parcelable,Android ResultReceiver回调如何工作?

我已经将ResultReceiver从我的Activity传递给了我的服务。 将ResultReceiver传递给我的服务的活动代码示例 ,以便服务可以回调Activity: ResultReceiver receiver = new ResultReceiver(new Handler()) { protected void onReceiveResult(int resultCode, Bundle resultData) { //process results } } Intent instructionServiceIntent = new Intent(context, InstructionService.class); instructionServiceIntent.putExtra(“receiver”, receiver); context.startService(instructionServiceIntent); InstructionService代码示例: protected void onHandleIntent(Intent intent) { Bundle parameters = intent.getExtras(); ResultReceiver resultReceiver = parameters.getParcelable(“receiver”); resultReceiver.send(METHOD_STATUS_RUNNING, Bundle.EMPTY); } 现在,这工作正常,因为当我在我的服务中调用resultReceiver.send方法时,会执行活动中相应的onReceiveResult方法。 我的问题是,这是如何工作的? 据我所知,ResultReceiver作为Parcelable从活动传递到服务,这意味着它是该对象的“副本”,而不是对在Activity中创建的原始ResultReceiver对象的引用。 因此,如何在服务类的ResultReceiver副本上调用send方法,使得活动中的原始ResultReceiver对象运行它的onReceiveResult方法?

无法实现Parcelable,因为我无法使CREATOR字段静态

Parcelable文档说CREATOR字段必须是静态的,但是当我尝试以这种方式实现它时,我得到错误“内部类不能有静态声明”。 我试图通过将我的CategoryButton放在一个单独的类中来解决这个问题(不是将它声明为MainActivity的内部类),但后来我无法在构造函数中调用getApplicationContext()来传递给super。 public class MainActivity extends ActionBarActivity { private class CategoryButton extends Button implements Parcelable{ private ArrayList buttons = null; private RelativeLayout.LayoutParams params = null; public CategoryButton(Context context){ super(context); }; public void setButtons(ArrayList buttons){ this.buttons = buttons; } public void setParams(RelativeLayout.LayoutParams params){ this.params = params; } public ArrayList getButtons(){ return this.buttons; } public RelativeLayout.LayoutParams getParams(){ […]

为什么在onSaveInstanceState()中保存非Parcelable对象的Hashtable有时会起作用?

在阅读了介绍性的Android编程书之后,我想改变示例应用程序,以巩固我对一些未真正涵盖的主题的理解。 在进行更改时,我犯了一个错误,但我很好奇为什么错误在某些情况下有效而在其他情况下无效。 应用程序中的活动将一系列问题存储在Hashtable ,其中Question是一个包含int和两个字符串的小类。 最初编写时,活动会在每个onCreate()上从服务器下载问题,因此我想实现onSaveInstanceState()以防止一些冗余下载。 onSaveInstanceState()使用putSerializable()将Hashtable保存到Bundle中。 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // mQuestions is a member variable of // type Hashtable if (mQuestions != null && mQuestions.size() > 0) { outState.putSerializable(SAVED_QUESTIONS, mQuestions); } } 即使在我知道Parcelable是什么或如何实现之前,它也能完美地适应屏幕方向的变化。 我只知道当我按下模拟器的主页键和应用程序静默时出现问题,无法在没有LogCat输出的情况下崩溃。 堆栈跟踪让我查找Parcelable并使Question实现它。 我的问题不是我做错了。 问题是: 当Question类没有实现Parcelable时,为什么应用程序只在按Home而不是屏幕方向更改时崩溃?

Monodroid将parcelable对象捆绑

所以我一直在努力将一些值放入我的重写OnSaveInstanceState中。 我需要在活动重启时保存一些类对象,这意味着它们必须是可以分配的,这对于Monodroid来说似乎是不可能实现的? 资料来源: http : //docs.xamarin.com/android/about/limitations 如何在不使用parcelable的情况下将这些类对象保存到bundle中? 我从服务器加载数据,我不希望再次这样做,例如在用户轮换上,再次调用OnCreate方法。 因此保存它们会很好,这可以节省服务器对偶尔旋转等的压力。

将对象从活动传递给另一个时出错(使用Parcelable)

我试图使用Parcelable将对象类从一个活动传递给另一个 我创建了一个类并将其命名为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 […]

将parcelable添加到自定义对象的接口类

我有一个自定义对象类,但是通过接口实现,我如何在其中加入parceable。 我跟踪并搜索了parceable,但它仅适用于对象类。 例如: 如何使我的自定义对象Parcelable? 我想将我的对象列表传递给android中的另一个活动。 代码: public interface Projection { interface Job { @XBRead(“./task”) List getTasks(); @XBRead(“./id”) String getid(); @XBRead(“./job_title”) String getjob_title(); @XBRead(“./job_description”) String getjob_description(); @XBRead(“./job_room”) String getjob_room(); @XBRead(“./status”) String getstatus(); } interface Task { @XBRead(“./task_id”) String gettask_id(); @XBRead(“./task_title”) String gettask_title(); @XBRead(“./task_description”) String gettask_description(); @XBRead(“./task_status”) String gettask_status(); } @XBRead(“/root/job”) List getJobs(); }