标签: parcelable

读写Parcelable对象的数组

我有以下类,它从一个包中读取和写入一个对象数组:

class ClassABC extends Parcelable {
    MyClass[] mObjList;

    private void readFromParcel(Parcel in) {
        mObjList = (MyClass[]) in.readParcelableArray(
                com.myApp.MyClass.class.getClassLoader()));
    }

    public void writeToParcel(Parcel out, int arg1) {
        out.writeParcelableArray(mObjList, 0);
    }

    private ClassABC(Parcel in) {
        readFromParcel(in);
    }

    public int describeContents() {
        return 0;
    }

    public static final Parcelable.Creator<ClassABC> CREATOR =
            new Parcelable.Creator<ClassABC>() {

        public ClassABC createFromParcel(Parcel in) {
            return new ClassABC(in);
        }

        public ClassABC[] newArray(int size) {
            return new ClassABC[size];
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我ClassCastException在阅读时得到readParcelableArray:

ERROR/AndroidRuntime(5880):引起:java.lang.ClassCastException:[Landroid.os.Parcelable;

上面的代码有什么问题?在编写对象数组时,我应该先将数组转换为ArrayList? …

android parcelable

74
推荐指数
4
解决办法
7万
查看次数

将Parcelable的子类写入另一个Parcel

我有一个实现Parcelable接口的类:

class A implements Parcelable {

}
Run Code Online (Sandbox Code Playgroud)

我有另一个类B包含一个A对象作为实例变量.在writeToPacel内部类B,我想写对象BParcel:

class B implements Parcelable{

    public void writeToParcel(Parcel dest, int flags) {
        dest.write ??? 
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么写和读它?

android parcelable

65
推荐指数
2
解决办法
3万
查看次数

Android:如何将Parcelable对象传递给intent并使用bundle的getParcelable方法?

为什么捆绑getParcelableArrayList,getParcelable方法; 但 Intent只有putParcelableArrayListExtra方法?我可以只传输object<T>,而不是ArrayList一个元素吗?那么,是getParcelable为了什么?

android bundle parcelable android-intent

64
推荐指数
1
解决办法
7万
查看次数

Android中的Parcelable和inheritance

我得到了Parcelable的一个实现,它适用于一个不涉及继承的单个类.在进行继承时,我在确定实现接口的最佳方法时遇到了问题.假设我得到了这个:

public abstract class A {
    private int a;
    protected A(int a) { this.a = a; }
}

public class B extends A {
    private int b;
    public B(int a, int b) { super(a); this.b = b; }
}
Run Code Online (Sandbox Code Playgroud)

问题是,这是为B实现Parcelable接口的推荐方法(在A?中都有??如何?)

java inheritance android design-patterns parcelable

62
推荐指数
1
解决办法
2万
查看次数

如何以一种聪明的方式将Java.util.Map写入parcel?

我有一个字符串的通用映射(键,值),这个字段是我需要可以分配的Bean的一部分.所以,我可以使用Parcel#writeMap方法.API Doc说:

请改用writeBundle(Bundle).在当前dataPosition()中将Map展平到parcel中,如果需要,增加dataCapacity().Map键必须是String对象.Map值使用writeValue(Object)编写,并且必须遵循其中的规范.强烈建议使用writeBundle(Bundle)而不是此方法,因为Bundle类提供了一个类型安全的API,允许您在编组时避免神秘的类型错误.

因此,我可以迭代我的Map中的每个条目并将其放入Bundle中,但我仍然在寻找一种更聪明的方法.我缺少Android SDK中的任何方法吗?

目前我这样做:

final Bundle bundle = new Bundle();
final Iterator<Entry<String, String>> iter = links.entrySet().iterator();
while(iter.hasNext())
{
    final Entry<String, String>  entry =iter.next();
    bundle.putString(entry.getKey(), entry.getValue());
}
parcel.writeBundle(bundle);
Run Code Online (Sandbox Code Playgroud)

android bundle parcelable

62
推荐指数
4
解决办法
3万
查看次数

既然 kotlin-android-extensions 已被弃用,如何使用 @Parcelize?

如何使用不是来自 kotlin-android-extensions 插件的 Parcelize替换annotation class Parcelizefrom package kotlinx.android.parcel

android annotations parcelable kotlin

61
推荐指数
4
解决办法
3万
查看次数

如何在使用Parcelable接口时序列化空值

关于我的代码示例,如果一个Locable的变量为null,我会做什么?例如,现在如果l.getZoom()返回null,我得到NullPointerException.

@Override
public void writeToParcel(Parcel parcel, int arg1) {
    parcel.writeInt(count);
    for(Locable l:locableArr){
        parcel.writeInt(l.getOriginId());
        parcel.writeInt(l.getLocableType());
        parcel.writeInt(l.getZoom());
        parcel.writeDouble(l.getLatituda());
        parcel.writeDouble(l.getLongituda());
        parcel.writeString(l.getTitle());
        parcel.writeString(l.getSnipet());
    }

}
Run Code Online (Sandbox Code Playgroud)

谢谢!

android nullpointerexception parcelable

60
推荐指数
4
解决办法
3万
查看次数

问题解组parcelables

我有一些实现Parcelable的类,其中一些类作为属性互相包含.我正在将类编组为一个,以便在活动之间传递它们.将它们编组到包裹中工作正常,但是当我尝试解组它们时,我收到以下错误:

...
AndroidRuntime  E  Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: schemas.Arrivals.LocationType
AndroidRuntime  E   at android.os.Parcel.readParcelable(Parcel.java:1822)
AndroidRuntime  E   at schemas.Arrivals.LayoverType.<init>(LayoverType.java:121)
AndroidRuntime  E   at schemas.Arrivals.LayoverType.<init>(LayoverType.java:120)
AndroidRuntime  E   at schemas.Arrivals.LayoverType$1.createFromParcel(LayoverType.java:112)
AndroidRuntime  E   at schemas.Arrivals.LayoverType$1.createFromParcel(LayoverType.java:1)
AndroidRuntime  E   at android.os.Parcel.readTypedList(Parcel.java:1509)
AndroidRuntime  E   at schemas.Arrivals.BlockPositionType.<init>(BlockPositionType.java:244)
AndroidRuntime  E   at schemas.Arrivals.BlockPositionType.<init>(BlockPositionType.java:242)
AndroidRuntime  E   at schemas.Arrivals.BlockPositionType$1.createFromParcel(BlockPositionType.java:234)
AndroidRuntime  E   at schemas.Arrivals.BlockPositionType$1.createFromParcel(BlockPositionType.java:1)
...
Run Code Online (Sandbox Code Playgroud)

LayoverType班(其中它的失败):

public class LayoverType implements Parcelable {    
    protected LocationType location;
    protected long start;
    protected long end;

    public LayoverType() {}

    public LocationType getLocation() …
Run Code Online (Sandbox Code Playgroud)

java android marshalling parcelable

59
推荐指数
7
解决办法
4万
查看次数

在Android中使用Serializable是不是很糟糕?

我一直在阅读很多文章和文章,颂扬Parcelable在Serializable上的速度.我一直在使用两种方法来通过Intents在Activities之间传递数据,并且在两者之间切换时还没有注意到任何速度差异.我必须传输的典型数据量是5到15个嵌套对象,每个对象有2到5个字段.

由于我有大约30个必须可转移的类,因此实现Parcelable需要大量的样板代码来增加维护时间.我目前的要求之一是编译的代码应该尽可能小; 我希望通过使用Serializable over Parcelable可以节省一些空间.

我应该使用Parcelable还是没有理由在Serializable上使用它来处理这么少量的数据?还是有另一个原因我不应该使用Serializable?

android serializable parcelable

53
推荐指数
3
解决办法
1万
查看次数

如何在Android屏幕上保存自定义ArrayList旋转?

我有一个ArrayList自定义对象,我希望能够在屏幕上保存和恢复旋转.

我知道,这是可以做到的onSaveInstanceStateonRestoreInstanceState如果我让ArrayList自己的类,它实现了无论是Parcelable还是Serializable......但是,有没有办法做到这一点,而无需创建另一个类?

android arraylist object parcelable screen-rotation

50
推荐指数
1
解决办法
5万
查看次数