2017-08-29 74 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() { ...