2016-06-08 62 views
9

當我的應用程序啓動時,我檢查Firebase數據庫中的當前用戶詳細信息(我正在存儲它的uid)。Firebase Android addListenerForSingleValueEvent有時不返回數據

我將addListenerForSingleValueEvent附加到用戶的參考讀取它的數據。

我的問題是,有時候,它不會返回任何價值,既不成功也不失敗。

只有清除應用程序的數據才能解決它,但當然會強制用戶再次登錄。

我已經閱讀了一些在SO的帖子,但沒有找到任何解決方案。

這裏是我的一段代碼:

DatabaseReference newUser =  
FirebaseDatabase.getInstance().getReference("users/"+uid); 
newUser.addListenerForSingleValueEvent(new ValueEventListener()  
    @Override 
    public void onDataChange(DataSnapshot snapshot) {} 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}); 
+0

Quick問題:你在使用認證嗎?你是否在同一個應用程序中訪問多個數據庫(或者你以前是否使用過相同的應用程序來訪問不同的數據庫)? –

+0

是的,我正在使用身份驗證。我只能訪問一個數據庫。順便說一句,即使重新啓動設備也沒有解決它。 – Adi

+0

這個問題只有在我開始使用新的SDK之後纔開始。 – Adi

回答

5

我已經看到了這一點的建議是呼籲keepSynced(true)Query對象。

+0

我有addListenerForSingleValueEvent相同的問題,是第一次應用程序啓動時,它的調用正常,但下次當我回來的應用程序,它不調用任何重寫方法。我試過保持現在和它的工作。 –

+0

但實際上New SDK存在問題 –

0

我的猜測是user/:id不存在。仔細檢查你的錯誤輸出:

DatabaseReference newUser = FirebaseDatabase.getInstance() 
    .getReference("users") 
    .child(uid) 
    .addListenerForSingleValueEvent(new ValueEventListener()  
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      if (snapshot.exists()) { 
       Log.i(TAG, snapshot.val()); 
      } else { 
       Log.e(TAG, "Not found: " + uid); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.e(TAG, databaseError.toString(); 
     } 
    }); 
-1

我一直有同樣的問題幾天,我終於修好了。

看起來像我的Api密鑰已更改!這就是阻止addListenerForSingleValueEvent()返回!
轉至Firebase Console,打開您的項目,單擊設置圖標gear icon並轉至項目設置。你會看到Web API Key。把它複製到你項目目錄中的google-services.json文件中。這是該文件的一個片段:

... 
    ], 
    "api_key": [ 
    { 
     "current_key": "<COPY Web Api Key HERE>" 
    } 
    ], 
    ... 

就是這樣。使用Firebase中的密鑰替換「current_key」的值後,它恢復工作(之前它有一些其他密鑰,我認爲我在Google Console上生成了它,並且它運行了幾個月,就在幾天前它停止工作)

相關問題