Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Populate textView from firebase database

I am trying to populate a TextView from a firebase database. Here is the sample json file.

{
 "Player" : {
  "Club" : "Valley Rovers",
  "Name" : "John Murphy"
 }
}

Here is my android code:

public class MainActivity extends AppCompatActivity {

private   TextView mPlayer;
private DatabaseReference mDatabase;




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

    mPlayer = (TextView) findViewById(R.id.player);;

    mDatabase = FirebaseDatabase.getInstance().getReference("Player").child("Name");

    final String player = mDatabase.push().getKey();

    mDatabase.child("Name").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            // Check for null
            if (player == null) {
                Log.e(TAG, "User data is null!");
                return;
            }




            mPlayer.setText(player);




        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

I want to add the name John Murphy to the firebase database and doing so the TextView mPlayer will populate with John Murphy.

like image 470
flutter Avatar asked Jul 12 '26 17:07

flutter


1 Answers

You are getting the child "Name" twice on your code (leading to Player/Name/Name). Remove it from the mDatabase initialization:

mDatabase = FirebaseDatabase.getInstance().getReference("Player");

And you're never really getting the value from the DataSnapshot received. To do so, use this:

mDatabase.child("Name").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String playerName = dataSnapshot.getValue(String.class);
            mPlayer.setText(playerName);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

In case someone wants to use POJO approach to this problem in future, follow the example below:

Remove the child("Name") from mDatabase.child("Name").addValueEventListener(new ValueEventListener() unless you want to fetch the "Name" child only. Also remember to effect the correction made on mDatabase initialization.

mDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // String playerName = dataSnapshot.getValue(String.class);
        PlayerModel playerModel =  dataSnapshot.getValue(PlayerModel.class);
         ((TextView)findViewById(R.id.textviewName)).setText(playerModel.getName());
        ((TextView)findViewById(R.id.textviewClub)).setText(playerModel.getClub());
        // mPlayer.setText(playerName);
    }
like image 68
Rosário Pereira Fernandes Avatar answered Jul 14 '26 09:07

Rosário Pereira Fernandes



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!