1

Hello Guys i need you I have a problem with Firebase Realtime Database I put the data successful to the Firebase but when I try to retrieve it from Firebase I got a problem there is how I put the data

private void user_info(String user_id, String user_display_name) {

    mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(user_id);

    HashMap<String, String> userMap = new HashMap<>();
    userMap.put("Name",user_display_name);
    userMap.put("Balls","30");
    userMap.put("Level","1");
    mProgressDialog.setMessage("Please Wait...");

    mDatabase.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {

            if (task.isSuccessful()){

            }
            else
                Toast.makeText(WelcomeActivity.this, ""+task.getException(), Toast.LENGTH_SHORT).show();
                mProgressDialog.dismiss();
        }
    });

}

And how I try to retrieve the data

private FirebaseUser mUser;
private DatabaseReference mDatabase;
private String level,level1;
private int lev,i;

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

    //Image
    mImg_level1 = (ImageView)findViewById(R.id.mImg_lev1);
    mImg_level2 = (ImageView)findViewById(R.id.mImg_lev2);
    mImg_level3 = (ImageView)findViewById(R.id.mImg_lev3);
    mImg_level4 = (ImageView)findViewById(R.id.mImg_lev4);
    mImg_level5 = (ImageView)findViewById(R.id.mImg_lev5);
    mImg_level6 = (ImageView)findViewById(R.id.mImg_lev6);
    mImg_level7 = (ImageView)findViewById(R.id.mImg_lev7);
    mImg_level8 = (ImageView)findViewById(R.id.mImg_lev8);
    mImg_level9 = (ImageView)findViewById(R.id.mImg_lev9);
    mImg_level10 = (ImageView)findViewById(R.id.mImg_lev10);
    mImg_level11 = (ImageView)findViewById(R.id.mImg_lev11);




    //Firebase
    mUser = FirebaseAuth.getInstance().getCurrentUser();
    String user_id = mUser.getUid();



    mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(user_id);
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            level = dataSnapshot.child("Level").getValue().toString();
            if (level.equals("1")){
                level1 = "1";
            }



            }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    Toast.makeText(this, level1, Toast.LENGTH_SHORT).show();

The toast don't show anything because it null

KENdi
  • 7,576
  • 2
  • 16
  • 31
Ra Isse
  • 361
  • 1
  • 4
  • 14
  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Matt Clark Jul 06 '17 at 18:10
  • i saw this post i solve the problem but still the data return null – Ra Isse Jul 06 '17 at 18:14
  • look my update still it return null – Ra Isse Jul 06 '17 at 18:17
  • What is returning null? Enter text in the field. Post the real issue. The issue posted is solved by the post marked. – Matt Clark Jul 06 '17 at 18:18
  • What is your new error now that you've changed the code? – Lewis McGeary Jul 06 '17 at 18:19
  • now i want to save the value of level to level1 how i will do it? when i put level1.equals(level) or level1 == level it return null for level1 like the level1 still empty – Ra Isse Jul 06 '17 at 18:25
  • Have a look at this answer, the Toast line is called before your Firebase data loads. https://stackoverflow.com/a/43419058/5251523 – Lewis McGeary Jul 06 '17 at 18:29

1 Answers1

1

Change this :-

mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            level = dataSnapshot.child("Level").getValue().toString();
            if (level.equals("1")){
                level1 = "1";
            }



            }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    Toast.makeText(this, level1, Toast.LENGTH_SHORT).show();

to this :-

mDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        level = dataSnapshot.child("Level").getValue().toString();
        if (level.equals("1")){
            level1 = "1";

        }
         Toast.makeText(this, level1, Toast.LENGTH_SHORT).show();
        }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

The reason this works is that Firebase downloads asynchronously and your code lines execute synchronously.

Rohan Stark
  • 2,346
  • 9
  • 16