我的自定义 ListView 不显示任何数据,我已尝试重新编码适配器和其他所有内容,但没有骰子。
它甚至没有显示任何错误,这让我发疯哈哈。谁能帮我调试我的代码。
这是我的 Activity :
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;
}
提前感谢您的帮助!
最佳答案
问题:网络请求需要时间,但是当列表中没有数据时您正在创建适配器,因此您需要告诉适配器数据发生变化
将 adapter
引用移到 onCreate
之外
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()
或
您可以在 showJSON
函数末尾的 listview
上创建和设置 adapter
关于android - 自定义 ListView 不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229659/