无法将一个JSONObject的ArrayList传递到新的Activity

4

我有一个问题,无法将ArrayList<JSONObject>传递给新的活动。

在我的搜索活动中,我使用以下代码:

intent.putParcelableArrayListExtra("data", resultsArray);

但是我遇到了一个“错误参数”错误。

我参考了这个 Stack Overflow 的问题。 Intent.putExtra List

public class SearchActivity extends AppCompatActivity {

    List<JSONObject> resultsArray;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //other stuff
        resultsArray = new ArrayList<JSONObject>();

    }


    public void goToActivity(){
            Intent intent = new Intent(SearchActivity.this, SearchResultsListActivity.class);
            intent.putParcelableArrayListExtra("data", resultsArray);
            startActivity(intent);
    }

    // ...

}

我的SearchResultsListAcivity只是一个列表

public class SearchResultsListAcivity extends AppCompatActivity {

    public ArrayList<JSONObject> searchResultsArray;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // .. .

        searchResultsArray = getStringArrayListExtra("data");

        ArrayAdapter<JSONObject> adapter = new ArrayAdapter<JSONObject>(this, android.R.layout.simple_list_item_1, android.R.id.text1, searchResultsArray);
        ListView lv = (ListView) findViewById(R.id.listViewSearchResults);
        lv.setAdapter(adapter);

    }
}

我也尝试了这里列出的实现答案:如何将自定义对象的ArrayList传递到新活动中?

Intent intent = new Intent(getApplicationContext(), displayImage.class);            
Bundle bundleObject = new Bundle();
bundleObject.putSerializable("KEY", arrayList);
intent.putExtras(bundleObject);

但是我仍然收到了错误的参数信息。

JSONObject 没有实现 ParcelableSerializable 接口。您必须将其作为 String[] 或其他形式进行传递,并手动管理序列化和反序列化。 - Kevin Krumwiede
1个回答

2

我建议将你的 JSON 数组转换为字符串数组,然后使用 putStringArrayListExtra() 将其传递到下一个活动中。在 SearchResultsListActivity 活动中,你可以将其解码回 JSON 数组。

i) 将你的 JSON 数组(或列表)转换为字符串数组。

JSONArray arr = new JSONArray(yourJSONresponse);
List<String> list = new ArrayList<String>();
for(int i = 0; i < arr.length(); i++){
list.add(arr.getJSONObject(i).toString());}

ii) 将其作为额外参数传递给您的SearchResultsListActivity活动

Intent intent = new Intent(SearchActivity.this, SearchResultsListActivity.class);
intent.putStringArrayListExtra("string_array", list);
startActivity(intent);

iii) 最后在您的下一个活动中解码它。
Bundle stringArrayList = getIntent().getExtras();
ArrayList<String> list = stringArrayList.getStringArrayList("string_array");
JSONArray arr = new JSONArray(list);

我没有尝试过这段代码,但至少它应该能让你了解如何解决你的问题。你可能需要进行一些微小的更改(如果最后一行不起作用,可能需要将其替换为for循环等)。


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