【问题标题】:How to populate JSON data into ListView using ArrayList如何使用 ArrayList 将 JSON 数据填充到 ListView
【发布时间】:2015-06-30 08:53:37
【问题描述】:

我已使用 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);

   }
 }

【问题讨论】:

  • 如果这篇文章值得投反对票,那就投吧,但也要告诉我投反对票的原因......
  • 请大家不要在没有说明原因的情况下投反对票,作为开发人员,您会遇到问题,因此我们都使用 stackoverflow。
  • 首先检查这个“murl.com/json/citywise.json”是否返回了正确的响应,然后在绑定到arraylist之前检查你得到了什么数据。在日志上打印。也在使用之前 adapter.notifyDataSetChanged();清空 ArrayList。看到这个stackoverflow.com/questions/15422120/…,然后发布你的输出/错误日志。
  • 谢谢@AmitabhSarkar 我很快就会回来...谢谢找到问题
  • @AmitabhSarkar 我刚刚错过了 destination.setCity(object.getString("city"));由于这没有得到城市名称:(

标签: java android json listview arraylist


【解决方案1】:

输入您的setAdapter code inside onPostExecute,您必须在获取title 时获取city 名称,以便在cityWiseSearch() 方法中比较城市名称

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

【讨论】:

    【解决方案2】:

    我认为您的ListView 是空的,因为您更新了ArrayList,但您必须在调用之前将allArrayList 发送到适配器

    adapter.notifyDataSetChanged();
    

    【讨论】:

    • 但我正在获取所有数据,但在尝试仅基于城市名称获取时没有获取
    • 好的。所以你应该尝试添加 Log.v("City", strStatuss +" - "+value);就在这一行之后: String strStatuss = allArrayList.get(i).getCity();
    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多