2016-03-15 47 views
1

我無法將ArrayList<JSONObject>傳遞給新的活動。無法將JSONObjects的ArrayList傳遞給新的活動

在我的搜索活動我用

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?的implmentation答案戲弄:

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

但我再次得到錯誤的參數錯誤。

任何幫助?

+0

'JSONObject'沒有實現'Parcelable'或'Serializable'。你必須將它作爲'String []'或其他東西傳遞,並自己管理序列化和反序列化。 –

回答

1

我只是將您的JSON數組轉換爲一個字符串數組,然後使用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)其傳遞給你的SearchResultsListActivity活動作爲額外

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

三)最後,在你的下一個解碼活動

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

我還沒有試過這段代碼,但至少它應該給你一個關於如何解決你的問題的想法。你可能需要做一些小的修改(最後一行可能會替換爲for循環,如果它不起作用等)

相關問題