2016-12-07 81 views
0

我正在使用volley進行web服務。所以,當我每次運行應用程序時都不會在列表中顯示任何內容。但是當我使用調試時,有時我正確地得到了列表。所以這裏是代碼。Android - json列表視圖

這就像在從json獲取數據之前插入listItem在Listview之前,我試圖在適配器之前放置一個wait(),但android studio不接受它。

有沒有人有類似的問題?

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

嘗試從Web服務接收數據後刷新適配器。將新項目添加到'ArrayList'後,使用'adapter.notifyDataSetChanged()'。 –

+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在on響應之後被聲明,如果我之前聲明並將其作爲final,它仍然不起作用 –