2017-05-28 81 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

感谢并始终欢迎。 –

相关问题