0

So reading from my Firebase database seen here by using the following code I have managed to get a 'data snapshot' of the first item in my database:

   FirebaseDatabase database = FirebaseDatabase.getInstance();
   DatabaseReference myRef =  FirebaseDatabase.getInstance().getReference("messages");

    myRef.orderByPriority().limitToFirst(1).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.e("data:", ""+dataSnapshot.getChildren());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e(TAG, "The read failed: " );
        }
    });

This returns:

datasnapshot: "DataSnapshot {key = message, value = {ygmailcom100={name=tom, message=kys, email=y@gmail.com}} }"

My question is now what...how do I access these different bits of data(name, msg, email(also the parent of these three bits of data, the 'ygmailcom100 'bit)) and put their data into strings. Also once i have read the data to strings how do i go about deleting that value from the message key.

I apologise for my ignorance as i am new to software development but any insight will be much appreciated.

AL.
  • 36,815
  • 10
  • 142
  • 281

2 Answers2

0

Android firebase query with multiple orderBy

To get Parent

databasereference1.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            GenericTypeIndicator<Map<String, HashMap<String, HashMap<String, String>>>> genericTypeIndicator = new GenericTypeIndicator<Map<String, HashMap<String, HashMap<String, String>>>>() {
            };

            Map<String, HashMap<String, HashMap<String, String>>> maps = dataSnapshot.getValue(genericTypeIndicator);
            Object[] str = maps.keySet().toArray();
            for (Object aStr : str) {

            }
            //adapter.notifyDataSetChanged();
            //L.tmlong(getActivity(), Arrays.toString(maps.values().toArray()));
        }

To get child, from parent get aStr and use child('messages/'+aStr)

databasereference2.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            GenericTypeIndicator<Map<String, HashMap<String, String>>> genericTypeIndicator =
                    new GenericTypeIndicator<Map<String, HashMap<String, String>>>() {
                    };

            Map<String, HashMap<String, String>> maps = dataSnapshot.getValue(genericTypeIndicator);
            Object[] str = maps.keySet().toArray();
            for (Object aStr : str) {

                }


            }

            //adapter.notifyDataSetChanged();
            //L.tmlong(getActivity(), Arrays.toString(maps.values().toArray()));
        }
Community
  • 1
  • 1
Ninja
  • 366
  • 2
  • 7
0

You can create a Model class and map the value to your model class.

You can refer this code.

Model Class: User.Java

public class User {

    private String username;
    private int accessLevel;
    private boolean adminApproved;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAccessLevel() {
        return accessLevel;
    }

    public void setAccessLevel(int accessLevel) {
        this.accessLevel = accessLevel;
    }

    public boolean isAdminApproved() {
        return adminApproved;
    }

    public void setAdminApproved(boolean adminApproved) {
        this.adminApproved = adminApproved;
    }
}


Mapping DataSnapshot value to POJO

mRef = new Firebase("<<FIREBASE_URI>>").child("<<CHILD_NODE_NAME>>");

 mRef.addValueEventListener(new ValueEventListener() {
    @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            try {

                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    User expense = ds.getValue(User.class);
                    users.add(expense.getUsername());
                }

            adapter.notifyDataSetChanged();

        }catch(Exception e){
            Log.e("MODEL_ERROR","Error Occurred while mapping to model");
        }
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
        Log.e("FIREBASE",firebaseError.getMessage());
    }
});


Firebase DB User Data

"users" : {
    "-KY0ZdsNNE1eDOTXdzaF" : {
      "accessLevel" : 0,
      "adminApproved" : false,
      "username" : "dummyUser2"
    }
}



Note: It is not a good practice to store User information in DB. Use this only as a reference.

Yoganand
  • 96
  • 3