2017-05-28 82 views
1

我的自定義列表視圖不顯示任何數據,我試圖重新編碼適配器和其他一切,但沒有骰子。自定義列表不顯示數據

它甚至沒有顯示任何錯誤,這就是讓我瘋狂的哈哈。任何人都可以幫助我調試我的代碼。

這是我的活動:

private ListView listView; 


private ArrayList<String> orderName; 

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

    orderName = new ArrayList<>(); 

    ListView listView = (ListView) findViewById(R.id.listViewOrder); 

    viewOrderAdapter adapter = new viewOrderAdapter(viewOrdersPage.this, orderName); 
    listView.setAdapter(adapter); 

    getBoxInformation(); 

} 

    private void getBoxInformation() { 
    final ProgressDialog loading = ProgressDialog.show(this, "GETTING BOX INFROMATION", "Processing Request...", false, false); 
    String url = DATA_URL + textUsername.getText().toString().trim(); 
    StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      showJSON(response); 
      loading.dismiss(); 
     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(viewOrdersPage.this, error.getMessage().toString(), Toast.LENGTH_LONG).show(); 
       } 
      }); 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 
private void showJSON(String response) { 
    String name = ""; 

    try { 
     jsonObject = new JSONObject(response); 
     result = jsonObject.getJSONArray(JSON_ARRAY); 
     order = result.getJSONObject(0); 
     name = order.getString(TAG_ORDERNAME); 

     JSONArray jsonarray = new JSONArray(name); 
     for (int i = 0; i < jsonarray.length(); i++) { 
      JSONObject jsonobject = jsonarray.getJSONObject(i); 
      names = jsonobject.getString("name"); 


      //THE TOAST DISPLAYS THE TEXT SO I KNOW THE CODE WORKS, EXCEPT THE LISTVIEW 
      Toast.makeText(viewOrdersPage.this, names, Toast.LENGTH_LONG).show(); 

    orderName.add(names); 

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

這是適配器類:

public class viewOrderAdapter extends BaseAdapter { 

private Context context; 

private ArrayList<String> orderName; 


public viewOrderAdapter(Context context, ArrayList<String> orderName){ 
    this.context = context; 
    this.orderName = orderName; 

} 

@Override 
public int getCount() { 
    return orderName.size(); 
} 

@Override 
public Object getItem(int position) { 
    return orderName.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 


@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    final View listView; 
    final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    listView = inflater.inflate(R.layout.view_orders_item, null); 

    TextView name = (TextView) listView.findViewById(R.id.orderNames); 


    name.setText(orderName.get(position)); 

    return listView; 
} 

}

感謝您的幫助提前!

回答

2

問題:所以你需要告訴適配器有數據的變化外onCreate

移動adapter參考網絡請求將需要時間,但要創建的適配器時出現在列表中沒有數據

private ArrayList<String> orderName; 
private viewOrderAdapter adapter ; // adapter reference 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_view_orders_page);  
    orderName = new ArrayList<>(); 
    ListView listView = (ListView) findViewById(R.id.listViewOrder);  
    adapter = new viewOrderAdapter(viewOrdersPage.this, orderName); 
    listView.setAdapter(adapter);  
    getBoxInformation(); 

} 

然後,在showJSON函數的末尾添加adapter.notifyDataSetChanged()

您可以創建並在listview設置adaptershowJSON功能

+0

是的,先生你是對的,讓我等五分鐘接受你的答案哈哈。我想編碼8小時直接真的打大腦哈哈。謝謝先生! –

1

結束這活動:

private ListView listView; 


    private ArrayList<String> orderName; 

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

     orderName = new ArrayList<>(); 

     ListView listView = (ListView) findViewById(R.id.listViewOrder); 



     getBoxInformation(); 

    } 

    private void setDataInList(){ 
    viewOrderAdapter adapter = new viewOrderAdapter(viewOrdersPage.this, orderName); 
     listView.setAdapter(adapter); 
    } 

     private void getBoxInformation() { 
     final ProgressDialog loading = ProgressDialog.show(this, "GETTING BOX INFROMATION", "Processing Request...", false, false); 
     String url = DATA_URL + textUsername.getText().toString().trim(); 
     StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       showJSON(response); 
       loading.dismiss(); 
      } 
     }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(viewOrdersPage.this, error.getMessage().toString(), Toast.LENGTH_LONG).show(); 
        } 
       }); 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
    } 
    private void showJSON(String response) { 
     String name = ""; 

     try { 
      jsonObject = new JSONObject(response); 
      result = jsonObject.getJSONArray(JSON_ARRAY); 
      order = result.getJSONObject(0); 
      name = order.getString(TAG_ORDERNAME); 

      JSONArray jsonarray = new JSONArray(name); 
      for (int i = 0; i < jsonarray.length(); i++) { 
       JSONObject jsonobject = jsonarray.getJSONObject(i); 
       names = jsonobject.getString("name"); 


       //THE TOAST DISPLAYS THE TEXT SO I KNOW THE CODE WORKS, EXCEPT THE LISTVIEW 
       Toast.makeText(viewOrdersPage.this, names, Toast.LENGTH_LONG).show(); 

     orderName.add(names); 

      } 
if(orderName.size()>0){ 
setDataInList(); 
} 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

這是適配器類:

public class viewOrderAdapter extends BaseAdapter { 

private Context context; 

private ArrayList<String> orderName; 


public viewOrderAdapter(Context context, ArrayList<String> orderName){ 
    this.context = context; 
    this.orderName = orderName; 

} 

@Override 
public int getCount() { 
    return orderName.size(); 
} 

@Override 
public Object getItem(int position) { 
    return orderName.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 


@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    View listView; 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    listView = inflater.inflate(R.layout.view_orders_item, null); 

    TextView name = (TextView) listView.findViewById(R.id.orderNames); 


    name.setText(orderName.get(position)); 

    return listView; 
} 
+0

嘿,先生我已經得到了答案,我錯過了** adapter.notifydatasetchanged **哈哈。無論如何感謝您的幫助先生你應得和upvote! –

+0

感謝並始終歡迎。 –

相關問題