java - Android Parcelable Class - 内部类不能有静态声明

标签 java android parcelable

我一直在尝试创建一个 Android Parcelable 对象,但一直遇到错误“内部类不能有静态声明”。作为引用,我一直在查看位于 here 的官方 Android 教程。 .

我当前的代码如下:

public class AppDetail implements Parcelable {
    CharSequence label;
    CharSequence name;
    Drawable icon;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeArray(new Object[] { this.label, this.name, this.icon });
    }

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

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

    public AppDetail() {}

    public AppDetail(Parcel in) {
        Object[] data = in.readArray(AppDetail.class.getClassLoader());

        this.label = (String)data[0];
        this.name = (String)data[1];
        this.icon = (Drawable)data[2];
    }
}

我在网上发现其他人遇到了类似的问题,并得出结论编译器不喜欢静态初始化 block (而不是静态类本身) - 我尝试遵循此建议并声明如下: public static Parcelable.Creator<AppDetail> CREATOR并在其他地方初始化 - 但是我遇到了同样的错误。

我怎样才能得到这个/一些可以编译的东西?

最佳答案

Yes it is- should that matter?

是的,因为这就是您收到错误的原因。您的错误不是由于 Parcelable.Creator<AppDetail> ,但由于 AppDetail本身。你不能有static方法或数据成员,例如 CREATOR ,在内部类上。

这样做的最终效果是类直接实现 Parcelable需要是 static内部类(即 public static class AppDetail implements Parcelable )或常规(非内部)Java 类。

基于此实现,只需制作 AppDetailpublic static class应该可以解决你的问题。

关于java - Android Parcelable Class - 内部类不能有静态声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687301/

相关文章:

javascript - 如何使用 request.getparameter 在我的 java Controller 中获取 JavaScript 变量?

java - 无效的方法声明 : "return type required" in constructor

Java - 密码字段字符计数器

java - 如何在执行一次操作后重用 Stream

android - 通过 "OnItemClick"从 sqlite 数据库中检索数据并将其显示在另一个类中

java - 解码错误时未找到类。可使用 byteArray、byte[] 进行解析

android - 导入android项目时出现问题

android - Root 但 su 说 "Permission denied"

java - 为什么即使我没有实现必要的功能,Parcelable 也能工作?

java - 不能在 Intent 上附加额外的内容