【问题标题】:Android: How to implement Parcelable to my objects? [duplicate]Android:如何为我的对象实现 Parcelable? [复制]
【发布时间】:2011-08-16 19:44:02
【问题描述】:

我有一个包含我的 JSON 索引的 ConstantData 类,我需要在带有附加功能的活动之间传递它们。但在此之前,我必须先对这个类的对象实现 Parcelable。

我的问题是,我应该如何在我的类中声明对象并将每个对象放入一个变量中?

我是新手,我现在完全一无所知。谢谢你。请随意修改下面的代码。

ConstantData.java

public class ConstantData{

       public static String project_title = "project title";
       public static String organization_title = "organization title";
       public static String keyword = "keyword";
       public static String short_code = "short code";
       public static String project_description = "description";
       public static String smallImageUrl = "smallImageUrl";
       public static String bigImageUrl = "bigImageUrl";
       public static String price= "price";
       public static String country= "country";



        public static ArrayList<Project> projectsList = new ArrayList<Project>();


        public int describeContents() {
            return 0;
        }

        public void writeToParcel(Parcel out, int flags) {
            out.writeString(project_title);
            out.writeString(organization_title);
            out.writeString(keyword);
            out.writeString(short_code);
            out.writeString(project_description);
            out.writeString(smallImageUrl);
            out.writeString(bigImageUrl);
            out.writeString(price);
            out.writeString(country);
        }

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

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

        private ConstantData(Parcel in) {
            project_title = in.readString();
            organization_title = in.readString();
            keyword = in.readString();
            short_code = in.readString();
            project_description = in.readString();
            smallImageUrl = in.readString();
            bigImageUrl = in.readString();
            price = in.readString();
            country = in.readString();
        }
    }

如果我的问题不够清楚,你可以查这个问题:How to send an object from one Android Activity to another using Intents?

他在那里写了myParcelableObject,我只是不知道如何制作parcelable对象。

编辑 Project.java

public class Project {

    public String project_title;
    public String organization_title;
    public String keyword;
    public String short_code;
    public String project_description;
    public String smallImageUrl;
    public String bigImageUrl;
    public String price;
    public String country;
 }

【问题讨论】:

  • 谢谢!所以在我的情况下,我只需要'公共抽象类A实现Parcelable'对吗?我不需要“公共类 B 扩展 A”,对吗?
  • 没有提到的一件事是,如果您已经将数据作为 JSON/XML 对象,并且如果您已经编写了解析器,那么有时只传递 JSON 或 XML 对象会更容易(如果不是)通过超过 1-2 次​​span>
  • 单独的评论/想法:另外,其中一些对象变得很重。为自己编写一个代码生成器以使对象可打包我觉得从长远来看可以节省大量时间

标签: java android


【解决方案1】:

需要实现Parcelable接口

public class ConstantData implements Parcelable {

    public void writeToParcel(Parcel out, int flags) {
        out.writeString(project_title);
    ....
        out.writeString(country);
        out.writeList(projectsList); // <<--
    }

    private ConstantData(Parcel in) {
        project_title = in.readString();
        ....
        country = in.readString();
        projectsList = in.readList();

我认为projectsList的编写工作,Project类也需要实现Parcelable

参见例如以this class 为例。

【讨论】:

  • 谢谢!还有一件事,我得到了包含 JSON 变量的“项目”类,如何在我的 ConstantData Parcelable 类中定义“项目”?例如,在上面的代码中,我将 Project 放在了一个数组中。 "公共静态 ArrayList projectsList = new ArrayList();"
  • @Irzan:您的意思是如何将该列表写入包裹?您可以为此使用developer.android.com/reference/android/os/… 方法。
  • 你能不能也给我一个具体的例子?非常感谢:)
  • 我试着写 'projectsList = parcel.readList();'不幸的是,在私有“对象(包裹包裹)”中无法完成。它向我 (List,ClassLoader) 询问参数
  • 如果您正在使用 Parcel 进行 Parcels,请尝试使用 readTyped... 函数。如果您实施了 CREATOR,这些尤其有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2015-08-29
  • 2020-03-27
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多