簡體   English   中英

如何使用 ArrayList 將 JSON 數據填充到 ListView

[英]How to populate JSON data into ListView using ArrayList

我已使用 ArrayList 成功將 JSON 數據解析為 ListView,但無法根據City名稱填充 List。

就像我允許用戶選擇城市,然后我嘗試使用新的 ArrayList 將結果填充到 ListView 中,但沒有將任何數據放入 ListView。

public class TitleListActivity extends Activity {

  ....

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_title);

    ......
    new JSONAsyncTask().execute("http://murl.com/json/citywise.json");  

    try {
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            value = extras.getString("new_variable_name");
            Toast.makeText(TitleListActivity.this, value, Toast.LENGTH_LONG).show(); 

            // not getting data city wise
            cityWiseSearch();
        }
        else
        {
            // getting all data
            adapter = new TitleListAdapter(TitleListActivity.this, R.layout.row, allArrayList);             
            listview.setAdapter(adapter); 
        }
    } catch (Exception e) {
        // TODO: handle exception
    }


    ....
}

class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected Boolean doInBackground(String... urls) {
        try {

            ....

                JSONArray jarray = jsono.getJSONArray("cities");

                for (int i = 0; i < jarray.length(); i++) {
                    JSONObject object = jarray.getJSONObject(i);

                    destination = new TitleList();                      
                    destination.setTitle(object.getString("address"));                      
                    allArrayList.add(destination);

                ......

        return false;
    }

    protected void onPostExecute(Boolean result) {
        dialog.cancel();
        ....
    }
}

public void cityWiseSearch() {              

    for (int i = 0; i <allArrayList.size(); i++) {
        destination = (TitleList) allArrayList.get(i);

        String strStatuss = allArrayList.get(i).getCity();

        if (strStatuss.equalsIgnoreCase(value)){                
            cityArrayList.add(destination);         
        }                      
    }              

    adapter = new TitleListAdapter(TitleListActivity.this, R.layout.row, cityArrayList);        
    listview.setAdapter(adapter);

   }
 }

把你的setAdapter code inside onPostExecute ,你必須要獲取city名稱,你取titlecityWiseSearch比較城市名稱()方法

destination.setCity(object.getString("city")); 

我認為你的ListView是空的,因為你更新了ArrayList但你必須在調用之前將allArrayList發送到適配器

adapter.notifyDataSetChanged();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM