Мой пользовательский список не отображает никаких данных, я попытался перекодировать адаптеры и все остальное, но не кубики.

Это даже не показывает никакой ошибки, и это то, что сводит меня с ума, ха-ха. Может ли кто-нибудь помочь мне отладить мой код.

Это моя деятельность:

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

}

Спасибо за любую помощь заранее!

1
Gionne Lapuz 28 Май 2017 в 19:36

2 ответа

Лучший ответ

Проблема: сетевой запрос займет некоторое время, но вы создаете адаптер, когда в списке нет данных, поэтому необходимо сообщить адаптеру об изменении данных

Переместить 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();

}

Затем добавьте adapter.notifyDataSetChanged() в конце функции showJSON

Или

Вы можете создать и установить adapter на listview в конце функции showJSON

2
Pavneet_Singh 28 Май 2017 в 16:55

Это занятие .

    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;
}
1
Aniruddh Parihar 28 Май 2017 в 16:47