簡體   English   中英

Android Studio 未從 Firebase 實時數據庫讀取檢索到的數據

[英]Android Studio is not reading the retreived data from Firebase realtime database

我正在嘗試從 Firebase 讀取數據,但盡管我正在使用教程,但它並未被 android studio 讀取

我試圖將 Android Studio 發送的鏈接復制到 Firebase:

DatabaseReference myRef = database.getReference("USERS").child(uID).child("DeviceID"); textview.setText(myRef.toString());

並在瀏覽器中傳遞結果,它向我顯示了 firebase 中的結果,但是當我嘗試使用它來獲取數據時,它沒有檢索任何內容。 這是我嘗試通過調用函數來讀取它的方式:

textview.setText(ReadDeviceId);

'''''''''''''''''''''''''''''''''''

   private String ReadDeviceId(){

    FBUser = FirebaseAuth.getInstance().getCurrentUser();
    uID = FBUser.getUid();
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("USERS").child(uID).child("DeviceID");

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

            r_deviceID = dataSnapshot.getValue(String.class);
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            r_deviceID = "no userID";
        }
    });
    return r_deviceID;
}

'''''''''''''''''''''''''''''''''''''''' 知道我的firebase數據庫安全規則是: '''''''''''''''''''''''''''''''''

{

“規則”:{

".write": "auth != null",

“.read”:真

}

}

'''''''''''''''''''

但沒有顯示任何內容

你可以試試這個代碼

 private String ReadDeviceId(){
      FBUser = FirebaseAuth.getInstance().getCurrentUser();
      uID = FBUser.getUid();
      FirebaseDatabase database = FirebaseDatabase.getInstance();
      DatabaseReference myRef = 
           database.getReference("USERS").child(uID).child("DeviceID");

     myRef.addValueEventListener(new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
             for(Datasnapshot snapshot : dataSnapshot.getChildren)
             {
                //try to map it with your on model class and replace the String with your model class
                r_deviceID = snapshot.getValue(String.class)
             }
             //r_deviceID = dataSnapshot.getValue(String.class);
          }

          @Override
          public void onCancelled(DatabaseError error) {
        // Failed to read value
             r_deviceID = "no userID";
           }
     });
     return r_deviceID;
 }

在您的ReadDeviceId()函數中,您將在設置之前返回r_deviceID的值(事件偵聽器不同步)。 因此,您的textview.setText(ReadDeviceId()); 將永遠是textview.setText(null); ,這將不顯示任何內容。

對於您的用例,您應該將addValueEventListener更改為addListenerForSingleValueEvent並從處理程序本身中設置 textview 的值,如下所示:

private String ReadDeviceId(){
    FBUser = FirebaseAuth.getInstance().getCurrentUser();
    uID = FBUser.getUid();
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("USERS").child(uID).child("DeviceID");

    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
                textview.setText(dataSnapshot.getValue(String.class));
        }

        @Override
        public void onCancelled(DatabaseError error) {
                // Failed to read value
                textview.setText("no userID");
        }
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM