将两个包传递给同一个 activity

Pass two bundles to same activity

我有一个包含多个用户信息的 json 数组响应列表。创建了一个包并成功将其传递给下一个 activity。使用用户选择的日期创建了另一个捆绑包,time.But 没有运气将第二个捆绑包发送到同一个 activity,因为我只能将一个捆绑包传递给同一个 activity。

我的实际问题是如何将 putExtras 中的第二个包传递给相同的 activity

Json Response
{
  "userinfo": [
    {
      "address": "Tambaram",
      "name": "Vishranthi"
    },
    {
      "address": "Medavakkam",
      "name": "Sophia" 
    },
 ]
}

捆绑包创建代码:

JSONArray infoarray = obj.getJSONArray("Info");
Bundle h = new Bundle();
for (int i = 0; i < infoarray.length(); i++) {
    Bundle b = new Bundle();

    JSONObject infoobject = infoarray.getJSONObject(i);
    String name = infoobject.getString("name");
    String address = infoobject.getString("address");

    b.putString("name", name);
    b.putString("address", address);

    h.putBundle(Integer.toString(i), b);

    System.out.println(b);
}
Intent i = new Intent(context, Secondpage.class);
Bundle d=new Bundle();
d.putString("date", text1);
d.putString("time", text2);

i.putExtras(h);
System.out.println(h);
context.startActivity(i);

你不能,所以最简单的解决方案是将你正在解析的 json 传递给第二个 activity 和你想要在第二个包中作为基元的值,然后在第二个 activity 将 json 解析为原始数据并检索日期和时间。

不要根据日期和时间创建另一个捆绑包,而是使用相同的捆绑包

JSONObject 或 JSONArray 不需要反序列化,只需将其作为字符串放入 Bundle 中即可。

Bundle bundle = new Bundle();
bundle.putString("MyBundle", infoarray.toString());

所以接下来 Activity,获取 JSONArray

JSONArray newJArray = new JSONArray(bundle.getString("MyBundle",""));

小提示:避免在循环内声明变量以避免内存泄漏。

我认为你应该稍微改变一下方法: 在您的第一个 activity 中执行此操作,您拥有 json 数组

 Intent i = new Intent(context, Secondpage.class);
        i.putExtra("userinfo", infoarray.toString());

然后在你的第二个 activity 中执行其余代码

 if (getIntent().getExtras() != null && getIntent().getExtras().containsKey("userinfo")) {
                try {
                    JSONArray infoarray = new JSONArray(getIntent().getExtras().getString("userinfo"));
                    for (int i = 0; i < infoarray.length(); i++) {
                        ]
                        JSONObject infoobject = infoarray.getJSONObject(i);
                        String name = infoobject.getString("name");
                        String address = infoobject.getString("address");
                       //your code parse user list


                    }
                } catch (JSONException e)

            }

如果你想将两个包放入你的意图中,你必须使用

Intent putExtra (String name, 
                Bundle value)

像这样:

Intent i = new Intent(context, Secondpage.class);
i.putExtra("bundleH", h);
i.putExtra("bundleD", d);

ref