Сбой приложения при попытке отображения данных через просмотр списка - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь получить данные, используя retrofit2, и отобразить эти данные, используя список, передаваемый в качестве параметра пользовательского адаптера.Когда я сохраняю данные в списке в методе onResponse(), в списке onResponse() метода есть какое-то значение.Но в методе oncreate() это дает мне ноль.Хотя я объявил Список глобальным.Когда я запускаю приложение, иногда ничего не отображается, а иногда происходит сбой приложения.Я знаю, это звучит как сумасшедший.Но это случилось.Итак, я хочу знать, что не так с моим Кодексом?как я могу отображать данные в виде списка?

Простите, если что-то не так с моим шаблоном вопроса, но этот мой первый вопрос на этом сайте.

MainActivity `

public class LaboratoryValues extends AppCompatActivity {

    public List<Data> productList = null;
    List<Data>arrayList = null;
    int size;
    String st;

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

        //productList = new ArrayList<Data>();
        getInvestigation();
        for(int i =0; i < size; i++){

            st = arrayList.get(i).getName();


        }
        System.out.println("Name : "+st);//here print Name : null

        ListView lview = (ListView) findViewById(R.id.listview);
        ListviewAdapter adapter = new ListviewAdapter(this, arrayList);
        lview.setAdapter(adapter);



    }


    private void getInvestigation() {

       /* final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        progressDialog.setCancelable(false); // set cancelable to false
        progressDialog.setMessage("Please Wait"); // set body
        progressDialog.show(); // show progress dialog*/


        ApiInterface apiService =
                Api.getClient(ApiInterface.BASE_URL).create(ApiInterface.class);


        Call<Investigation> investigationCall = apiService.getInvestigation();
        investigationCall.enqueue(new Callback<Investigation>() {
            @Override
            public void onResponse(Call<Investigation> call, Response<Investigation> response) {

                arrayList = response.body().getData();
              //productList.addAll(arrayList);
                size = response.body().getData().size();
                for (int i = 0; i < size; i++) {

                    System.out.println("Name : " + arrayList.get(i).getName());//here printing Name is ok


                }

            }
            @Override
            public void onFailure(Call<Investigation> call, Throwable t) {
                Toast.makeText(getApplicationContext(),"data list is empty",Toast.LENGTH_LONG).show();

            }
        });




    }


}

Пользовательский адаптер (listviewAdapter)

public class ListviewAdapter extends BaseAdapter {


        public List<Data> productList;
        Activity activity;
        //Context mContext;

        public ListviewAdapter(Activity activity, List<Data> productList) {
            super();
            this.activity = activity;
            this.productList = productList;
        }

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

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

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

        private class ViewHolder {
            TextView name;
            TextView normal_finding;
            TextView increased;
            TextView decreased;
            TextView others;
        }

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

            ViewHolder holder;
            LayoutInflater inflater = activity.getLayoutInflater();


            if (convertView == null) {
                convertView = inflater.inflate(R.layout.listview_row, null);
                holder = new ViewHolder();
             holder.name = convertView.findViewById(R.id.name);
             holder.normal_finding =convertView.findViewById(R.id.normal_finding);
             holder.increased = convertView.findViewById(R.id.increased);
             holder.decreased = convertView.findViewById(R.id.decreased);
             holder.others =convertView.findViewById(R.id.others);
             convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            Data item = productList.get(position) ;
            holder.name.setText(item.getName());
            System.out.println("holderName : "+item.getName() );
            holder.normal_finding.setText(item.getNormal_finding());
            System.out.println("holderName : "+item.getNormal_finding() );
            holder.increased.setText(item.getIncreased());
            holder.decreased.setText(item.getDecreased());
            holder.others.setText(item.getOthers());

            return convertView;


        }

    }

1 Ответ

0 голосов
/ 07 декабря 2018

Совершенно нормально, что это не работает.Помещение вашего метода getInvistigation () перед циклом не означает, что ответ на ваш запрос выполненинтернет-соединение.

вам просто нужно поместить обработку (цикл и адаптер) внутри getInvistagion после получения данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...