首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将JSON“子数组”传递给另一个活动

将JSON“子数组”传递给另一个活动
EN

Stack Overflow用户
提问于 2018-12-13 04:34:51
回答 3查看 76关注 0票数 2

为了提高我的Android开发技能,我正在尝试做一个简单的购物应用。如下所示:

正如您从这张图片中可以猜到的,我有一个产品列表,我正在从一个类似于下一个的JSON中解析这些产品:

我已经能够将JSON解析为数组列表,并使用RecyclerView列出主要产品。但是,我希望能够单击一个产品并看到它各自的子产品,这样我就可以将它们添加到购物车中。

我想过通过创建一个新的活动来使用Master-Detail流,但是...如何将特定的"Subproducts“数组传递给Detail活动?(例如,单击“苏打水”并被重定向到新的活动,以查看“可乐”、“胡椒博士”和“雪碧”)。我应该只传递我已经解析过的整个ArrayList吗?或者,有没有一种方法只使用意图传递“子数组”?

我为这个新奇的问题道歉,但我一周半前才开始学习Java和Android开发。

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2018-12-13 04:47:26

Gson是一个很好的库,可以将JSON转换为java对象,反之亦然。您可以将JSON转换为对象并以这种方式处理数据。例如,您可以让Mango类扩展一个抽象类Juice。有了这些层次关系,做你想做的事情会容易得多。

票数 1
EN

Stack Overflow用户

发布于 2018-12-13 15:44:23

代码语言:javascript
复制
1.That's probably how it works.
Json Object obtained implements Serializable 
SerInfo It's mine Example

2.Transmit ArrayList

 ArrayList<SerInfo> listObj = new ArrayList<SerInfo>();
                SerInfo serInfo1 = new SerInfo(name, website, weibo);
                SerInfo serInfo2 = new SerInfo(name, website, weibo);
                listObj.add(serInfo1);
                listObj.add(serInfo2);
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, ResultActivity.class);
                intent.putExtra("listobj", (Serializable) listObj);
                startActivity(intent);

3.Receive ArrayList

 ArrayList<SerInfo> listObj =  (ArrayList<SerInfo>) getIntent().getSerializableExtra("listobj");
票数 0
EN

Stack Overflow用户

发布于 2018-12-13 17:00:45

1.JSON是解析JSON的最简单方法:

例如:

代码语言:javascript
复制
Gson gson = new Gson();
User user= gson.fromJson(jsonInString, User.class);

2.传递数据有两种方法:1.首先,当你想传递对象时,你可以使用Parcelable,例如:在object公共类中,User实现了Parcelable {

代码语言:javascript
复制
    @PrimaryKey
    @SerializedName("id")
    private int mId;

    @SerializedName("phone")
    private String mPhone;

    @SerializedName("email")
    private String mEmail;


    public User() {

    }

    public User(String phone) {

        mPhone = phone;
    }

    public void setPhone(String phone) {

        this.mPhone = phone;
    }

    public void setEmail(String email) {

        this.mEmail = email;
    }

    @Override
    public int describeContents() {

        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

        dest.writeString(this.mPhone);
        dest.writeString(this.mEmail);

    }

    protected User(Parcel in) {

        mPhone = in.readString();
        mEmail = in.readString();
    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel in) {

            return new User(in);
        }

        @Override
        public User[] newArray(int size) {

            return new User[size];
        }
    }; 
}

在第一个练习中:

代码语言:javascript
复制
Intent intent = new Intent(getActivity(), LoadActivity.class);
                intent.putExtra(SELECTED_USER, mUser);
                startActivity(intent);

在第二个练习中:

代码语言:javascript
复制
 Bundle bundle=getIntent().getExtras();
    User selectedUser=bundle.getParcelable(SELECTED_USER);

Attention:SELECTED_USER是一个常量字符串。

2.SECOND当你想要传递非对象时:如果E类型是可序列化的,你可以用同样的方式传递一个ArrayList。在第一个练习中:

代码语言:javascript
复制
ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);

第二个活动是:

代码语言:javascript
复制
ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53750928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档