Android/Java: 如何将一个Activity中的ArrayList<JSONObject>传递到另一个Activity中?

3

我希望从另一个活动中获取传递的值,例如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:尝试在null对象引用上调用接口方法   'java.util.Collection.toArray()的对象[] java.lang.Object'

有什么意见吗?

我可以建议的一种方法是将您的JsonObject转换为字符串,并使用putStringArrayListExtra()传递它。 - p.mathew13
2个回答

2

JSONObject不是可序列化的,甚至不是Parcelable。因此,你唯一的选择是利用JSONObject的toString()方法,然后依赖于使用Intent的putStringArrayListExtra()将其传递给其他对象。

在另一个活动中,使用Intent的getExtras()接收并通过将字符串传递到其构造函数并循环形成ArrayList来将其转换为JSONObject(如果需要)。

假设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) ) );
}

你好,我有两个错误信息 => 在BaseBundle中获取java.lang.string不能应用于(int)的receivingListOfStrings.get(i) 和 => 无法解析receivingListOfStrings.length()方法的长度() - ΩlostA
我认为除了最后一个循环似乎不起作用外,我可以使用你的所有代码。但其余部分都运行良好。谢谢。 - ΩlostA
1
不客气,@ΩlostA!也谢谢您接受了这个答案。 - SaadAAkash

0

不要传递ArrayList< JSONObject >,您可以创建一个Parcelable/Serializable Java对象(Model),将JSONObject转换为Java对象,然后传递ArrayList< Model>。最终,您必须在项目的某个地方将此JSONObjcet转换为可用。

要将JSONObject转换为Model,请查看以下内容:

如何将JSONObject转换为类对象?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接