2014-11-25 3 views
-1

У меня есть проблема с точки зрения сетки, когда я заполнить данные из JSON .. Этот мой кодAndroid GridView не может загружать данные из JSON

public class Guest extends Activity { 

    private static String link_data = "http:some_url"; 
    ArrayList<String> stringArrayList = new ArrayList<String>(); 
    private static String TAG = Guest.class.getSimpleName(); 

    private String[] guest = new String[]{}; 

    private GridView gridView; 
    private ArrayAdapter<String> adapter; 

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

     makeJsonArrayRequest(); 

     gridView = (GridView) findViewById(R.id.gridView1); 

     adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, guest); 

     bindingData(); 

     gridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // TODO Auto-generated method stub 

      } 
     }); 
    } 

    private void bindingData(){ 
     adapter.notifyDataSetChanged(); 
     gridView.invalidateViews();  
     gridView.setAdapter(adapter); 

    } 

    private void makeJsonArrayRequest() { 

     JsonArrayRequest req = new JsonArrayRequest(link_data, 
       new Response.Listener<JSONArray>() { 
      @Override 
      public void onResponse(JSONArray response) { 
       Log.d(TAG, response.toString()); 
       try { 
        for (int i = 0; i < response.length(); i++) { 
         guest = new String [response.length()]; 
         JSONObject data = (JSONObject) response 
           .get(i); 

         String name = data.getString("name"); 

         guest[i] = name; 
         Log.d(TAG, guest[i].toString()); 
        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
        Toast.makeText(getApplicationContext(), 
          "Error: " + e.getMessage(), 
          Toast.LENGTH_LONG).show(); 
       } 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       // TODO Auto-generated method stub 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       Toast.makeText(getApplicationContext(), 
         error.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(req); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.guest, menu); 
     return true; 
    } 

} 

и это мой файл XML

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridView1" 
    android:numColumns="2" 
    android:gravity="center" 
    android:columnWidth="50dp" 
    android:stretchMode="columnWidth" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

</GridView> 

Когда я cek on log Я нашел все свои данные в этом массиве, но gridview не отображает данные.

Кто-то может мне помочь? где моя ошибка? Спасибо

+0

не использовать adapter.notifyDataSetChanged(); gridView.invalidateViews(); перед установкой adaper – user3917131

+0

Почему вы добавили андроид-залп среди тегов? – vault

ответ

0

Вы звоните bindingData() слишком рано. Возможно, вы установили адаптер с пустым массивом guest. Звоните bindingData в onResponse

+0

Я сделал, но данные по-прежнему не отображаются на gridview ,, –

0

Поместите эти две строки внутри onResponse.

adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, guest); 

     bindingData(); 

, как показано ниже

private void makeJsonArrayRequest() { 

     JsonArrayRequest req = new JsonArrayRequest(link_data, 
       new Response.Listener<JSONArray>() { 
      @Override 
      public void onResponse(JSONArray response) { 
       Log.d(TAG, response.toString()); 
       try { 
        for (int i = 0; i < response.length(); i++) { 
         guest = new String [response.length()]; 
         JSONObject data = (JSONObject) response 
           .get(i); 

         String name = data.getString("name"); 

         guest[i] = name; 
         Log.d(TAG, guest[i].toString()); 
        } 
adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, guest); 

     bindingData(); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        Toast.makeText(getApplicationContext(), 
          "Error: " + e.getMessage(), 
          Toast.LENGTH_LONG).show(); 
       } 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       // TODO Auto-generated method stub 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       Toast.makeText(getApplicationContext(), 
         error.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(req); 
    } 
Смежные вопросы