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

时间:2016-03-15 18:47:15

标签: java android android-intent android-activity arraylist

我无法将ArrayList<JSONObject>传递给新活动。

在我的搜索活动中,我使用

intent.putParcelableArrayListExtra("data", resultsArray);

但我得到了Wrong Argument error

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

但我再次得到错误的论点错误。

1 个答案:

答案 0 :(得分:1)

我只是将您的JSON数组转换为String数组,然后使用putStringArrayListExtra()将其传递给您的下一个活动。您可以在SearchResultsListActivity活动中将其解码回JSON数组。

i)将您的JSON数组(或列表)转换为String数组

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)将其作为额外的<{p>}传递给您的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循环,如果它不起作用,等等)