2016-02-26 128 views
4

我正在爲我的Android應用使用Firebase。使用像我已經成功地檢索到的信息在多個地方在我的代碼:未調用Firebase onDataChange

dbRef = new Firebase(Constants.URL_DB); 
childRef = dbRef.child(Constants.KEY_CHILD); 
objectRef = childRef.child(objectId); 

// Log the URL to the object. 
// This has been verified. The path is good. 
Log.d("DEBUG", "To String: " + objectRef.toString()); 

childRef.addValueEventListener(new ValueEventListener() 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     Log.d("DEBUG", "Success"); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
     Log.e("DEBUG", "Failure"); 
    } 
}); 

完全相同的代碼已經在另一個活動,但出於某種原因成功使用,不會對特定的活動在工作(onDataChange是從來沒有打過電話,也沒有打過電話)。其他活動中的Firebase會話是否與此相沖突?我看到可以解決的問題:

Firebase.goOnline(); 
Firebase.goOffline(); 

儘管我不確定我是否理解那些確切的功能。也許這是因爲我無法訪問由他的ID添加了push()的孩子?

UPDATE:

我成功地在數據庫中objectRef寫,但onDataChange()仍不會被調用。

+0

您製作的所有Firebase對象最終會轉到連接到服務器的同一會話/套接字。所以這些活動不應該在這方面互相干擾。您可能想要檢測連接狀態是否發生更改,而不是調用'goOffline()'/'goOnline()'https://www.firebase.com/docs/web/guide/offline-capabilities.html#section-connection -state –

回答

1

好的,我發現是什麼原因造成的問題。我有一個空循環,因爲我需要信息繼續,並以某種方式阻止來自數據庫的事件。我曾在onCreate()是這樣的:

childRef.addValueEventListener(new ValueEventListener() 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     Log.d("DEBUG", "Success"); 
     object = snapshot.getValue(MyObject.class); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
     Log.e("DEBUG", "Failure"); 
    } 
}); 

而我卻在onResume()循環:

while(object == null); 

我做什麼來糾正問題與更換循環:

if(object == null){ 
    // Do stuff 
} 

而且我添加了一個致電onResume()onDataChange()

+0

如何從內部類訪問「對象」而不聲明它是最終的? – mcdonaldjosh

+2

使其成爲一個實例變量'public Object object',或者創建一個具有所需類型變量的類'final object = new MyObject(); object.setValue(值);' – Sunshinator

相關問題