2015-06-30 2 views
-2

Я успешно проанализировал данные JSON в ListView с помощью ArrayList, но не смог заполнить List на основе City.Как заполнить данные JSON в ListView с помощью ArrayList

Как я разрешаю пользователю выбирать Город, а затем я пытаюсь заполнить результаты в ListView с помощью нового ArrayList, но не получаю никаких данных в 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); 

    } 
} 
+0

ЧТО НЕПРАВИЛЬНО ЗДЕСЬ? – Sun

+1

если этот пост заслуживает downvotes, то делать, но и сказать мне причину downvoting ... – Sun

+7

Парни, пожалуйста, не downvote, не сообщая причины, как разработчик вы застряли в проблемах, поэтому мы все используем stackoverflow. –

ответ

2

Положите ваш setAdapter code inside onPostExecute и вы должны должны принести city имя, как вы выбирают title для сравнения название города в cityWiseSearch() метод

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

Большое вам спасибо, чтобы найти решение :) – Sun

+1

Thats Pleasure :) – NarendraJi

0

Я думаю, что ваш ListView пуст beceause из вас обновить ArrayList но вы должны послать к адаптеру перед вызовом

adapter.notifyDataSetChanged(); 
+0

, но я получаю все данные, а не получаю при попытке получить только по имени города – Sun

+0

Итак, вы должны попытаться добавить Log.v («Город», strStatuss + "-" + значение) сразу после этой строки: String strStatuss = allArrayList.get (i) .getCity(); – Maxime

Смежные вопросы