java - 无法将 JSONObjects 的 ArrayList 传递给新 Activity

标签 java android android-intent android-activity arraylist

我在传递 ArrayList<JSONObject> 时遇到问题到一个新的 Activity 。

在我的搜索 Activity 中我使用

intent.putParcelableArrayListExtra("data", resultsArray);

但我得到一个 Wrong Argument error .

我用这个 SO 问题作为引用。 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);

    }
}

我还研究了这里列出的实现答案 How to pass ArrayList of Custom objects to new activity? :

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

但是我又遇到了错误的参数错误。

最佳答案

我只是将您的 JSON 数组转换为字符串数组,然后使用 putStringArrayListExtra() 将其传递给您的下一个 Activity 。您可以在 SearchResultsListActivity Activity 中将其解码回 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 Activity

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

iii) 最后在你的下一个 Activity 中解码它

Bundle stringArrayList = getIntent().getExtras();
ArrayList<String> list = stringArrayList.getStringArrayList("string_array");
JSONArray arr = new JSONArray(list);

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

关于java - 无法将 JSONObjects 的 ArrayList 传递给新 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36019632/

相关文章:

java - Android查询多对多关系

android - 如何确定我们来自哪个 Activity ?

java - 单击 TextView 时应用程序崩溃

android - 为什么 Activity A在 Activity B被销毁时开始

java - 禁用一组 JButton 中特定 JButton 的 mouseEvent

java - 如何在Java中将包含 "#!"的URL更改为 "d/"?

java - 我们需要有关使用 Java NIO 实现服务器软件的建议

java - 创建新文件时的奇怪问题

android - Flutter 版本解决此特定应用程序上的失败错误

android - Google Play Services 9.2.0 导致设备在没有 Google Play Services 的情况下意外崩溃 - NPE at android.app.Instrumentation.execStartActivity