将两个包传递给同一个 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);
我有一个包含多个用户信息的 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);