2016-12-07 2 views
0

Я использую залп для веб-сервисов. Итак, когда я запускаю приложение каждый раз, когда он ничего не показывает в списке. Но когда я использую debug, иногда я правильно получил список. Итак, вот код.Android - json list view

Он как будто вставляет listItem на Listview, прежде чем получать данные от json, я попытался поставить wait() перед адаптером, но андроид-студия не принимает его.

Есть ли кто-нибудь, у кого была схожая проблема?

public class listedeal_res extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.listedeal_res); 
      Button ajouter=(Button) findViewById(R.id.ajouetres); 
      Intent i =getIntent(); 
      final ListView maListView = (ListView) findViewById(R.id.liste_deal_res); 
      final int idres=i.getIntExtra("idres",0); 
      final boolean b =true; 
      ajouter.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent = new Intent(listedeal_res.this,AjouterDeal.class); 
        intent.putExtra("idres",idres); 
        listedeal_res.this.startActivity(intent); 
       } 
      }); 
      final ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>(); 

      final HashMap<String, String> map; 
      map = new HashMap<String, String>(); 
      Response.Listener<String> resp=new Response.Listener<String>() 
      {   
       @Override 
       public void onResponse (String response) { 
        try {  
         JSONArray jsonResponse = new JSONArray(response); 
         int i=0;  
         while (jsonResponse.getJSONArray(i)!=null) 
         { 
          while (jsonResponse.getJSONArray(i)!=null) 
          { 
           map.put("Nom",jsonResponse.getJSONArray(i).getString(2)); 
           map.put("Restraurant",jsonResponse.getJSONArray(i).getString(0)); 
           map.put("description",jsonResponse.getJSONArray(i).getString(1)); 
           listItem.add(map); 

           i++; 
          } 
         }  
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

       } 
      }; 

      drinkeat.drinkandeat.javas.liste_deal_res_req liste_deal_res_req= new liste_deal_res_req(idres+"",resp); 
      RequestQueue queue= Volley.newRequestQueue(listedeal_res.this); 
      queue.add(liste_deal_res_req); 

      SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.row_deal_user, 
        new String[] {"Nom", "Restraurant", "description"}, new int[] {R.id.titlerow, R.id.resteaurantnaamerow, R.id.descriptionrow}); 

      maListView.setAdapter(mSchedule); 

     } 
    } 
+1

в залпе по notifydatasetchange вызова ответа(); метод – Redman

+1

попытайтесь обновить свой адаптер после получения данных из webservice. Используйте 'adapter.notifyDataSetChanged()' после добавления новых элементов в 'ArrayList'. –

+0

Я добавил ответ, чтобы вам было легко – Redman

ответ

0

Добавить метод notifydatasetchange к адаптеру, как показано ниже

public void onResponse (String response) { 
       try {  
        JSONArray jsonResponse = new JSONArray(response); 
        int i=0;  
        while (jsonResponse.getJSONArray(i)!=null) 
        { 
         while (jsonResponse.getJSONArray(i)!=null) 
         { 
          map.put("Nom",jsonResponse.getJSONArray(i).getString(2)); 
          map.put("Restraurant",jsonResponse.getJSONArray(i).getString(0)); 
          map.put("description",jsonResponse.getJSONArray(i).getString(1)); 
          listItem.add(map); 

          i++; 
         } 
        } 
        mSchedule.notifyDataSetChanged(); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 
+0

mschedule объявлен после ответа, если я объявляю его раньше и ставлю его окончательным, он все еще не работает –