2014-11-25 47 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> 

当我日志我发现我所有的数据在该阵列,但gridview不显示数据..

有人可以帮助我吗? 我的错误在哪里? 谢谢

+0

不使用adapter.notifyDataSetChanged(); gridView.invalidateViews();在放置adaper之前 – user3917131 2014-11-25 13:59:06

+0

为什么你将android-volley放在标签中? – vault 2014-11-25 14:00:01

回答

0

您正在致电bindingData()过早。可能你设置了空的guest阵列的适配器。拨打电话bindingDataonResponse

+0

我做过了,但数据仍然没有显示在gridview上, – 2014-11-25 14:42:02

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); 
    }