将JSON“子数组”传递给另一个Activity

时间:2018-12-12 20:34:51

标签: java android android-intent arraylist android-activity

为了提高我的Android开发人员技能,我正在尝试制作一个简单的购物应用程序。像这样:

您可以从这张图片中猜出,我有一个产品列表,我正在从JSON解析产品,如下一个:

我已经能够将JSON解析为数组列表,并使用RecyclerView列出主要产品。但是,我希望能够单击某个产品并查看其相应的子产品,以便将它们添加到购物车中。

我曾考虑过通过创建新的Activity使用主从流程,但是...如何将特定的“子产品”数组传递给Detail Activity? (例如,单击“苏打”并重定向到新活动,以查看“可乐”,“胡椒博士”和“雪碧”)。我应该只传递已经解析的整个ArrayList吗?还是有一种方法只能使用Intent传递“子数组”?

我为这个新问题表示歉意,但是一周半前我才刚刚开始学习Java和Android开发。

谢谢!

3 个答案:

答案 0 :(得分:1)

Gson是一个很好的库,可以将JSON转换为Java对象,反之亦然。您可以将JSON转换为对象并以这种方式使用数据。例如,您将让Mango类扩展一个抽象类Juice。有了这些层次结构的关系,您将可以轻松地完成您想做的事情。

答案 1 :(得分:0)

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");

答案 2 :(得分:0)

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

例如:

Gson gson = new Gson();
User user= gson.fromJson(jsonInString, User.class);

2。您有2种传递数据的方式: 1.首先当您想传递对象时可以使用Parcelable 例如: 在对象中     公共类用户实现Parcelable {

    @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];
        }
    }; 
}

在第一次活动中:

Intent intent = new Intent(getActivity(), LoadActivity.class);
                intent.putExtra(SELECTED_USER, mUser);
                startActivity(intent);

第二个活动:

 Bundle bundle=getIntent().getExtras();
    User selectedUser=bundle.getParcelable(SELECTED_USER);

注意:SELECTED_USER是一个常量字符串。

2.SECOND当您想传递非对象时: 如果E类型是Serializable,则可以以相同的方式传递ArrayList。 在第一次活动中:

ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);

第二个活动:

ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");