Android/Java: 如何将 ArrayList<JSONObject> 从 Activity 获取到另一个?
Android/Java: How to get the ArrayList<JSONObject> from an Activity to another?
我想从另一个 activity 获取一个值,它适用于多种类型,如 JSONArray、String 等...但我找不到检索 ArrayList 值的方法。
我试了好几种方法都没有成功:
ArrayList<JSONObject> poiArr;
JSONArray jsonPoints;
try {
poiArr = new ArrayList<JSONObject>(bundle.getSparseParcelableArray("poiArr"));
//here is the problem
} catch (Exception e) {
e.printStackTrace();
}
try {
jsonPoints = new JSONArray(bundle.getString("lesPoints"));
} catch (JSONException e) {
e.printStackTrace();
}
我收到此错误消息:
java.lang.NullPointerException: Attempt to invoke interface method
'java.lang.Object[] java.util.Collection.toArray()' on a null object
reference
有什么想法吗?
JSONObject 不可打包,甚至不可序列化。因此,您剩下的唯一选择是利用 JSONObject 的 toString()
方法,然后依靠使用 Intent 的 putStringArrayListExtra()
将其传递给另一个。
另一方面 activity,使用 Intent 的 getExtras()
接收并将其转换为 JSONObject,方法是将 String 传递到其构造函数并在需要时循环形成 ArrayList。
比如说,JSONObject的ArrayList是sendingArr
:
List<String> sendingListOfStrings = new ArrayList<String>();
for(int i = 0; i < sendingArr.length(); i++) {
sendingListOfStrings.add( sendingArr.getJSONObject(i).toString() );
}
正在从 ActivityOne 发送到 ActivityTwo:
Intent intent = new Intent(ActivityOne.this, ActivityTwo.class);
intent.putStringArrayListExtra("sending_list", sendingListOfStrings);
startActivity(intent);
然后捕获它=在另一个:
ArrayList<JSONObject> receivingArr;
Bundle receivingListOfStrings = getIntent().getExtras();
ArrayList<String> list = receivingListOfStrings.getStringArrayList("sending_list");
for (int i = 0; i < receivingListOfStrings.length(); i++) {
receivingArr.add( new JSONObject( receivingListOfStrings.get(i) ) );
}
您可以创建一个 Parcelable/Serializable Java 对象(模型)并将 JSONObject 转换为 Java,而不是传递 ArrayList< JSONObject >对象,然后传递 ArrayList 。
最终,您必须在项目的某处转换此 JSONObjcet 才能使用它。
要将 JSONObject 转换为模型,请检查:
How do I convert a JSONObject to class object?
我想从另一个 activity 获取一个值,它适用于多种类型,如 JSONArray、String 等...但我找不到检索 ArrayList 值的方法。
我试了好几种方法都没有成功:
ArrayList<JSONObject> poiArr;
JSONArray jsonPoints;
try {
poiArr = new ArrayList<JSONObject>(bundle.getSparseParcelableArray("poiArr"));
//here is the problem
} catch (Exception e) {
e.printStackTrace();
}
try {
jsonPoints = new JSONArray(bundle.getString("lesPoints"));
} catch (JSONException e) {
e.printStackTrace();
}
我收到此错误消息:
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
有什么想法吗?
JSONObject 不可打包,甚至不可序列化。因此,您剩下的唯一选择是利用 JSONObject 的 toString()
方法,然后依靠使用 Intent 的 putStringArrayListExtra()
将其传递给另一个。
另一方面 activity,使用 Intent 的 getExtras()
接收并将其转换为 JSONObject,方法是将 String 传递到其构造函数并在需要时循环形成 ArrayList。
比如说,JSONObject的ArrayList是sendingArr
:
List<String> sendingListOfStrings = new ArrayList<String>();
for(int i = 0; i < sendingArr.length(); i++) {
sendingListOfStrings.add( sendingArr.getJSONObject(i).toString() );
}
正在从 ActivityOne 发送到 ActivityTwo:
Intent intent = new Intent(ActivityOne.this, ActivityTwo.class);
intent.putStringArrayListExtra("sending_list", sendingListOfStrings);
startActivity(intent);
然后捕获它=在另一个:
ArrayList<JSONObject> receivingArr;
Bundle receivingListOfStrings = getIntent().getExtras();
ArrayList<String> list = receivingListOfStrings.getStringArrayList("sending_list");
for (int i = 0; i < receivingListOfStrings.length(); i++) {
receivingArr.add( new JSONObject( receivingListOfStrings.get(i) ) );
}
您可以创建一个 Parcelable/Serializable Java 对象(模型)并将 JSONObject 转换为 Java,而不是传递 ArrayList< JSONObject >对象,然后传递 ArrayList
要将 JSONObject 转换为模型,请检查:
How do I convert a JSONObject to class object?