【问题标题】:Passing a JSON "subarray" to another Activity将 JSON“子数组”传递给另一个 Activity
【发布时间】:2018-12-12 20:34:50
【问题描述】:

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

正如您从那张图片中猜到的那样,我有一个产品列表,我正在从 JSON 中解析它,就像下一个一样:

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

我曾考虑通过创建一个新的 Activity 来使用 Master-Detail 流,但是……如何将特定的“子产品”数组传递给 Detail Activity? (例如,单击“Soda”并被重定向到新活动,以查看“Coke”、“Dr. Pepper”和“Sprite”)。我应该只传递我已经解析的整个 ArrayList 吗?或者有没有办法只使用 Intent 传递“子数组”?

对于这个新手问题,我深表歉意,但我一周半前才开始学习 Java 和 Android 开发。

提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 哦,当然,我实际上是使用 Gson 将“products”数组转换为 Java ArrayList。我的问题是,如何将“子产品”ArrayList 传递给另一个 Activity?抱歉,如果不清楚。
    【解决方案2】:
    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");
    

    【讨论】:

      【解决方案3】:

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

      例如:

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

      2.您有两种传递数据的方式: 1.FIRST当你想传递对象时,你可以使用 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 类型是可序列化的,则可以以相同的方式传递 ArrayList。 在第一个活动中:

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

      离子第二个活动:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        • 2016-08-09
        • 2022-06-15
        • 2017-04-05
        • 1970-01-01
        相关资源
        最近更新 更多