2016-08-02 24 views
0
mRefQ.addValueEventListener(new ValueEventListener() { 


    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String txt = dataSnapshot.getValue(String.class); 
     showtext.setText(txt); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 

因爲它只是在數據發生改變時才能訪問這個值,但是當我想要的時候我想訪問它(即oncreate)。致電firebase getvalue oncreate

回答

0

通過關注this steps,您只能訪問一次數據。

由於@Frank提到有一個監聽器會在連接時及每次改變時給你訪問。

記住,所有這一切都在一個單獨的線程異步發生,因此爲了保證價值可以用的onCreate您可能必須自己做編排並按住主線程,直到值準備使用。

0

好吧所以原來創建的時候不調用它,我不得不等待火力加載了對應用

0

它不是的onCreate triggerred一次()方法。如果在OnCreate()方法中使用addValueEventListener,則不會停止removeEventListener。計數正在增加,從未停止,當我運行時負載高達85%,所以我不得不關閉我的網絡並將其卸載。但我剛剛得到解決。這是我的代碼,如果你想檢查它。

變量聲明爲全局...

private DatabaseReference main; 
private ValueEventListener valueEventListener; 

在onCreate()方法.....

valueEventListener = main.addValueEventListener(new 
ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      boolean countExists = false; 
      int count = 1; //starts from 1 when data is uploaded for the first time 
      for (DataSnapshot out: dataSnapshot.getChildren()) { 
       if (out.getKey().equals("count")) { 
        String temp = out.getValue(String.class); 
        countExists = true; 
        try { 
         count = Integer.parseInt(temp); 
        } 
        catch (NumberFormatException e) { 
         count = 1; 
        } 
        break; 
       } 
      } 

      if (!countExists) { 
       main.child("count").setValue(String.valueOf(count)); 
       Toast.makeText(getApplicationContext(), "Count Created", Toast.LENGTH_SHORT).show(); 
       upload.setClickable(true); 
      } 
      else { 
       main.child("count").setValue(String.valueOf(++count)); 
       Toast.makeText(getApplicationContext(), "Count Updated", Toast.LENGTH_SHORT).show(); 
       upload.setClickable(true); 
      } 
      main.removeEventListener(valueEventListener); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Toast.makeText(getApplicationContext(), "Failed to upload", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

請務必添加removeEventListener當你調用它在onCreate()方法或它永遠不會停止。如果不在onStart()方法中調用removeEventListener,則不會造成問題。

這不是你的問題,但...

如果你想利用火力對可能的自由,你不能讓所有的用戶下載資料,而不需要或您的帶寬可能會成爲在一天之內完全。因此,我計算數據並只下載該孩子的數值並比較結果並進行更新。所以當你調用addValueListener時它可以減少你的帶寬。

相關問題