0

What I am trying to do is retrieve the number of items in recyclerView and display them as text. I keep getting the same errors which can be seen below code:

public class COM800s1 extends AppCompatActivity {

private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference attendanceRef = db.collection("Attendance");
private AttendanceAdapter adapter;
private TextView attendanceNumbers;



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



    FloatingActionButton floatingActionButton = findViewById(R.id.button_add_session);
    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(COM800s1.this,NewAttendanceRecord.class));
        }
    });

    setUpRecyclerView();



}

private void setUpRecyclerView() {
    final Query query = attendanceRef.whereEqualTo("sessionID", "5I0PLcpgmwdcjKLYLgkU").orderBy("userEmail", Query.Direction.ASCENDING);

    FirestoreRecyclerOptions<Attendance> options = new FirestoreRecyclerOptions.Builder<Attendance>()
            .setQuery(query, Attendance.class).build();


    adapter = new AttendanceAdapter(options);

    RecyclerView recyclerView = findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);

    attendanceNumbers = findViewById(R.id.attendanceNums);

    recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            int positionView = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
            attendanceNumbers.setText(Integer.toString(positionView)); //The TextView you want to update
        }
    });





   // attendanceNumbers.setText((adapter.getItemCount() + " students have attended this session"));


    new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,
            ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            adapter.deleteItem(viewHolder.getAdapterPosition());
        }
    }).attachToRecyclerView(recyclerView);

    adapter.setSetOnItemClickListener(new AttendanceAdapter.OnItemClickListener() {

        @Override
        public void onItemClick(Attendance documentSnapshot, int position) {

        }
    });

}

    @Override
    protected void onStart () {
        super.onStart();
        adapter.startListening();

    }

    @Override
    protected void onStop(){
        super.onStop();
        adapter.stopListening();
    }

}

Here is the errors I receive in the logcat:

Process: com.dissertation.studentscanner, PID: 3781
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.dissertation.studentscanner.COM800s1$2.onScrolled(COM800s1.java:70)
        at android.support.v7.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:4840)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3909)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3540)
        at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1767)
        at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:356)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
        at android.view.Choreographer.doCallbacks(Choreographer.java:723)
        at android.view.Choreographer.doFrame(Choreographer.java:655)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
AskNilesh
  • 67,701
  • 16
  • 123
  • 163

2 Answers2

1

In your onCreate() method add this line

attendanceNumbers = findViewById(R.id.yourTextViewIDhere); 

your are missing this that's way it showing null pointer exception at setText() method calling

Faiizii Awan
  • 1,615
  • 1
  • 13
  • 28
0

The error in your code is you don't declare the The textview attendanceNumbers.

you have to declare it using this line

attendanceNumbers = findViewById(R.id.YOUR_TEXTVIEW_ID_IN_XML_FILE); 

before calling this method

setUpRecyclerView();

so it will be

 attendanceNumbers = findViewById(R.id.YOUR_TEXTVIEW_ID_IN_XML_FILE); 
    setUpRecyclerView();

Happy Coding!

Momen Zaqout
  • 1,508
  • 1
  • 16
  • 17