2017-08-29 75 views
0

我在Firebase中设置了一个子项的值,但是当我从Firebase获取值时,该值为null。我不明白为什么。Android - 从Firebase返回null的getValue返回null

database.child("User").addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        int depositInteger = 0; 
        try { 
         depositInteger = Integer.parseInt(depositText.getText().toString().trim()); 
        } catch (NumberFormatException e) { 
         if (depositText.equals("")) { 
          Toast.makeText(getActivity(), "Failed", Toast.LENGTH_SHORT).show(); 
         } 
        } 


        database.child(user.getDisplayName()).child("deposit").setValue(depositInteger); 
        Long previousDeposit = dataSnapshot.child("User").child(user.getDisplayName()).child("deposit").getValue(Long.class); 
        System.out.println("VAAAALUE: " + previousDeposit); 


       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 

enter image description here

+0

从这里引用https://stackoverflow.com/questions/44494430/retrieve-user-data-from-firebase-database/44497238#44497238 –

回答

1

要设置一个值,你可以直接在这样的参考使用setValue()方法:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference userRef = rootRef.child("Users").child(user.getDisplayName()); 
userRef.child("deposit").setValue(9); //Sets the value to 9 

来获取值,请使用以下代码:

ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     int deposit = dataSnapshot.child("deposit").getValue(Integer.class); 
     Log.d("TAG", deposit); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
userRef.addListenerForSingleValueEvent(eventListener); 

请看正确的其中包含Users,而不仅仅是User,如屏幕截图所示。

1

根据你的数据库结构,你应该参考孩子用户并在代码中您所呼叫的用户。修复那个错误...

//Replace child tag by Users to fix the error 
database.child("Users").addValueEventListener(new ValueEventListener() { ...