2016-08-02 27 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时它可以减少你的带宽。

相关问题