自定义列表视图不显示数据

Custom Listview not showing data

我的自定义列表视图没有显示任何数据,我已经尝试重新编码适配器和其他一切但没有骰子。

它甚至没有显示任何错误,这让我发疯哈哈。谁能帮我调试我的代码。

这是我的 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();
    }
}

这是适配器 class:

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

这是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);



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

这是适配器class:

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