2017-02-04 80 views
0
FirebaseOptions options = new FirebaseOptions.Builder() 
       .setCredential(FirebaseCredentials.applicationDefault()) 
       .setDatabaseUrl("https://mkastrive.firebaseio.com") 
       .build(); 
     FirebaseApp defaultApp = FirebaseApp.initializeApp(options); 
     DatabaseReference ref = defaultDatabase 
       .getInstance() 
       .getReference("users"); 

     ref.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       System.out.println("in onDataChange"); 
       System.out.println(dataSnapshot.getValue()); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       System.out.println("in onCancelled"); 
       System.out.println(databaseError.toString()); 
      } 
     }); 

我正在Android中的Google雲模塊中執行上述操作。我認爲我的Firebase的初始化是成功的,因爲System.out.println("usersRef.push(): " + usersRef.push()); // Working 但我沒有看到addListenerForSingleValueEvent的任何內容。我在日誌中也看不到任何錯誤/警告。我的數據庫規則是爲任何人設置的,以便能夠讀/寫數據。谷歌應用引擎中的Firebase管理員SDK設置

更新1:根據使用的setValue()的建議,我想對火力的文件的例子:

DatabaseReference usersRef1 = ref.child("users"); 

Map<String, User> users = new HashMap<String, User>(); 
users.put("alanisawesome", new User("June 23, 1912", "Alan Turing")); 
users.put("gracehop", new User("December 9, 1906", "Grace Hopper")); 

usersRef1.setValue(users); 

但這不是在數據庫中插入或者,也沒有錯誤。日誌空白。

更新2: 一些日誌

FirebaseApp defaultApp = FirebaseApp.initializeApp(options); 
this.defaultDatabase = FirebaseDatabase.getInstance().getReference(); 
defaultDatabase.child("users").getPath(): https://mkastrive.firebaseio.com 
defaultDatabase.child("users").getPath(): /users 

回答

0

調用push()不會對數據庫進行任何更改。這可能就是爲什麼你的監聽器沒有被調用。 push()只是返回一個DatabaseReference,您可以使用該值在該引用表示的位置進行更改。該位置的密鑰(唯一推送ID)完全在客戶端上生成。

嘗試使用setValue()實際上向數據庫寫入值DatabaseReferencepush()返回。