Android - Заполните проблемы просмотра переработчика - PullRequest
0 голосов
/ 15 ноября 2018

Я сделал что-то, делая это, когда arraylist.day == calendar.dayofmonth, он программно прокручивается в позицию arraylist, но когда я начинаю свою деятельность, у меня появляется эта ошибка: «Попытка вызвать виртуальный метод» boolean java.lang.String.equals (java.lang.Object) 'для ссылки на пустой объект ".

Может кто-нибудь мне помочь, пожалуйста?

Planning.java:

    public void setUpRecyclerView(){
    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
}

private void setUpFirebase(){
    db = FirebaseFirestore.getInstance();
}

private void loadDataFromFirebase(){
    if(eventsArrayList.size()>0){
        eventsArrayList.clear();}
    db.collection("Planning").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            for(DocumentSnapshot querySnapshot: task.getResult()){
                Events Nom = new Events(querySnapshot.getString("Nom"),querySnapshot.getString("Lieu"),querySnapshot.getString("Heure"),querySnapshot.getString("Minute"),querySnapshot.getString("Day"));
                eventsArrayList.add(Nom);
            }
            tvLoad.setVisibility(View.GONE);
            progressBar.setVisibility(View.GONE);
            adapter = new MyRecyclerViewAdapter(Planning.this, eventsArrayList);
            recyclerView.setAdapter(adapter);
            recyclerView.setItemAnimator(new DefaultItemAnimator());
        }
}

    public void ScrollTo(int position){
    recyclerView.scrollToPosition(position);
}
}

RecyclerViewAdapter:

    @Override
public void onBindViewHolder(@NonNull MyRecyclerViewHolder holder, int position) {
    Calendar cal = Calendar.getInstance();
    holder.tvLieu.setVisibility(View.VISIBLE);
    holder.tvDate.setVisibility(View.VISIBLE);
    holder.cardView.setCardBackgroundColor(Color.WHITE);
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.tvNom.getLayoutParams();
    params.gravity = Gravity.START;
    holder.tvNom.setLayoutParams(params);
    if(eventsArrayList.get(position).getDay().equals(String.valueOf(cal.get(Calendar.DAY_OF_MONTH)))) { planning.ScrollTo(position); }
    holder.tvNom.setText(eventsArrayList.get(position).getNom());
    holder.tvLieu.setText(eventsArrayList.get(position).getLieu());
    holder.tvDate.setText(eventsArrayList.get(position).getHeure() + "h" + eventsArrayList.get(position).getMinute());
    if(eventsArrayList.get(position).getHeure().equals("")){
        holder.tvDate.setVisibility(View.GONE);
        holder.tvLieu.setVisibility(View.GONE);
        params.gravity = Gravity.CENTER;
        holder.tvNom.setLayoutParams(params);
        holder.cardView.setCardBackgroundColor(Color.parseColor("#227c97"));
    }
}

1 Ответ

0 голосов
/ 15 ноября 2018

Без правильной трассировки стека я могу предположить, что либо eventsArrayList.get(position).getHeure(), либо eventsArrayList.get(position).getDay() вернул ноль.

Если вы думаете, что он падает на eventsArrayList.get(position).getHeure(), вы можете вместо этого попробовать TextUtils.isEmpty , который также проверяет наличие нуля:

if(TextUtils.isEmpty(eventsArrayList.get(position).getHeure())){
    holder.tvDate.setVisibility(View.GONE);
    holder.tvLieu.setVisibility(View.GONE);
    params.gravity = Gravity.CENTER;
    holder.tvNom.setLayoutParams(params);
    holder.cardView.setCardBackgroundColor(Color.parseColor("#227c97"));
} else {
    // also you should update tvDate, tvLieu, tvNom and cardView
    // or you would get weird behaviour when the view holder is being recycled
}

Если вы думаете, что он падает на eventsArrayList.get(position).getDay(), вы можете использовать TextUtils.equals :

if (TextUtils.equals(eventsArrayList.get(position).getDay(), String.valueOf(cal.get(Calendar.DAY_OF_MONTH)))

Самое главное, я бы не рекомендовал RecyclerView.scrollTo в onBindViewHolder, это плохая практика, вы должны выполнять это действие где-то еще. А может быть, потому что вы пытаетесь соответствовать условию, и оно может вернуть ноль для других позиций, поэтому возникает NPE.

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