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?