How to give reference for one particular child from firebase ? how to read inside child? Check out my screenshot and help me to solve this error

Viewed 39

enter image description here

I'm not getting data from firebase child Moreim (Moreimages) but remaining data shows in output how to read Moreim child from firebase actually I'm reading data from secondActivity

I'm using viewpager for more images to display in one Imageview and I created Adapter, Adapter works fine it returning imageView but not displaying because I don't know to refer Moreim Guys help me to solve this null error

  SecondActivity:
    
    public class SecondActivity extends AppCompatActivity {
        DatabaseReference ref;
     TextView Gname,Gnickname,Gdesc;
     ImageView Gimages;
        private ArrayList<String> imageUrls ;
        private static final String TAG = "SecondActivity";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            Gname = (TextView)findViewById(R.id.gettingname);
            Gnickname =(TextView)findViewById(R.id.gettingnickname);
            Gimages = (ImageView)findViewById(R.id.imageview);
            Gdesc = (TextView)findViewById(R.id.getdesc);
            imageUrls = new ArrayList<String>();
    
            ref = FirebaseDatabase.getInstance().getReference("Users");
            String UsersId = getIntent().getStringExtra("User");
    
             ref.child(UsersId).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if(snapshot.hasChildren()){
                        String name = (snapshot.child("Name").getValue()).toString();
                        String nick = (snapshot.child("Nickname").getValue()).toString();
                        // String imagee = (snapshot.child("images").getValue().toString());
                        String descc = (snapshot.child("Description").getValue().toString());
                        Gname.setText(name);
                        Gnickname.setText(nick);
                        //   Picasso.get().load(imagee).into(Gimages);
                        Gdesc.setText(descc);
    
                        for (DataSnapshot data : snapshot.getChildren()) {
                           imageUrls.add(data.child("Moreim").getValue().toString());
                        }
                        }
                    else {
                        Gname.setText("No data");
                    }
                    ViewPager viewPager = findViewById(R.id.viewimages);
                    ViewAdapter adapter = new ViewAdapter(SecondActivity.this,imageUrls);
                    viewPager.setAdapter(adapter);
                }

I'm having doubt in this part
 for (DataSnapshot data : snapshot.getChildren()) {
                           imageUrls.add(data.child("Moreim").getValue().toString());
                        }
how to read child Moreim ?

Error:
  Process: com.example.firebasesearchrec, PID: 5818
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at com.example.firebasesearchrec.SecondActivity$1.onDataChange(SecondActivity.java:55)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
1 Answers

Try

GenericTypeIndicator<ArrayList<String>> t = new GenericTypeIndicator<ArrayList<String>>() {
                            };
                            imageUrls = snapshot
                                    .child("Moreim")
                                    .getValue(t);

Instead of

for (DataSnapshot data : snapshot.getChildren()) {
                       imageUrls.add(data.child("Moreim").getValue().toString());
                    }

Reasoning:

As far as I understand, you need a way to get an ArrayList<String> from a field in the snapshot. Aside from using model classes, simply passing ArrayList.class won't do, since it can't factor in the <String> wildcard. So in this snippet, a generic type is made of an ArrayList<String> which is then passed.

I hope this helps!!

Edit: Typo in field name.

Related