Android - Parcelable类中的上下文

时间:2014-04-11 06:49:07

标签: android parcelable

我在实现Parcelable的类中有以下内容:

private static final long serialVersionUID = 66;
private HashMap<Integer, Bitmap> mBitmaps;
private HashMap<Integer, Drawable> mDrawables;
private Context mContext;

@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    dest.writeValue(mBitmaps);
    dest.writeValue(mDrawables);
    dest.writeValue(mContext);
    dest.writeByte((byte) (mActive ? 0x01 : 0x00));

}

我收到错误:

java.lang.RuntimeException: Parcel: unable to marshal value android.app.Application@4051cfe0
at android.os.Parcel.writeValue(Parcel.java:1132)
at com.example.example.ImageManager.writeToParcel(ImageManager.java:82)


dest.writeValue(mContext); is on line 82.

3 个答案:

答案 0 :(得分:0)

如本回答所述:https://stackoverflow.com/a/6112919/7721253

您正在尝试添加到不可序列化的宗地对象。您要序列化的对象中的对象也必须是可序列化的。

答案 1 :(得分:-1)

您正在写信给Parcel。

  

您是否实施了Parcelable?

您需要实现Serializable或Parcelable接口。否则,该值不会像错误所示那样被编组。

另外,

  

实现Parcelable接口的类也必须具有静态   字段名为CREATOR,它是一个实现的对象   Parcelable.Creator界面。

查看android Parcelable

答案 2 :(得分:-1)

只需编写一个包含Context-Object的小类,如下所示:

import android.content.Context;

public class ContextHolder {
    public static Context context = null;

    public static void setContext(Context context){
        ContextHolder.context = context;
    }

    public static Context getContext(){
        return context;
    }
}

然后,只要您需要Context,就可以从您需要的任何地方调用ContextHolder.getContext()函数。

干杯