0

Using Firebase database to display the data in a RecyclerView. The app crashes when they run this line of code

itemGroup.setHeaderTitle(groupSnapShot.child("headerTitle").getValue(true).toString());

I get this Error:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

private void getFirebaseData(){
    dialog.show();
    myData.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            List<ItemGroup> itemGroups = new ArrayList<>();
            for(DataSnapshot groupSnapShot:dataSnapshot.getChildren())
            {
                ItemGroup itemGroup = new ItemGroup();


   itemGroup.setHeaderTitle(groupSnapShot.child("headerTitle").getValue(true).String());
   GenericTypeIndicator<ArrayList<ItemData>> genericTypeIndicator = new GenericTypeIndicator<ArrayList<ItemData>>(){};

   itemGroup.setListItem(groupSnapShot.child("listItem").getValue (genericTypeIndicator));
   itemGroups.add(itemGroup);

            }
            iFirebaseLoadListener.onFirebaseLoadSuccess(itemGroups);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

 iFirebaseLoadListener.onFirebaseLoadFailed(databaseError.getMessage());

        }
    });

}

when i comment out that line of code, i get this E/RecyclerView: No adapter attached; skipping layout from my logcat... Im not sure if this affects the RecyclerView adapter...

Eon
  • 11
  • 4

1 Answers1

0

Try doing it this way

private void getFirebaseData(){
        dialog.show();
        myData.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                List<ItemGroup> itemGroups = new ArrayList<>();
                for(DataSnapshot groupSnapShot:dataSnapshot.getChildren())
                {
                    ItemGroup itemGroup = groupSnapShot.getValue(ItemGroup.class);


       itemGroup.setHeaderTitle(itemGroup.getHeaderTitle());
       GenericTypeIndicator<ArrayList<ItemData>> genericTypeIndicator = new GenericTypeIndicator<ArrayList<ItemData>>(){};

       itemGroup.setListItem(groupSnapShot.child("listItem").getValue (genericTypeIndicator));
       itemGroups.add(itemGroup);

                }
                iFirebaseLoadListener.onFirebaseLoadSuccess(itemGroups);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

     iFirebaseLoadListener.onFirebaseLoadFailed(databaseError.getMessage());

            }
        });

    }

If you need more help, post your database structure and your ItemGroup.class

Gastón Saillén
  • 12,319
  • 5
  • 67
  • 77