我試圖在Java應用程序中實施Firebase管理軟件開發工具包。我想給孩子添加childeventlistener
,並且當孩子添加了我想要孩子的價值並且存儲到系統剪貼板時。這裏是我的main.java
文件至今:addChildEventListener不適用於java應用程序
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.auth.FirebaseCredentials;
import com.google.firebase.database.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.io.FileInputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
FileInputStream serviceAccount =
new FileInputStream("path/to/.jason");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("xxxxxxxxxx")
.build();
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection data;
FirebaseApp.initializeApp(options);
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference ref = firebaseDatabase
.getReference().child("ClipSync");
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
cliptext string = dataSnapshot.getValue(cliptext.class);
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection data;
data = new StringSelection(string.getText());
c.setContents(data, data);
System.out.println("Child added");
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
while (true){}
}
}
我cliptext
類:
public class cliptext {
String text;
public cliptext(String text) {
this.text = text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
問題,我面對:
當孩子在添加到數據庫那個時間代碼應該觸發addChildeventlistner但沒有發生。
我可以寫入數據到數據庫,也能夠檢索它,所以在firebase-admin設置中沒有問題。
注:我使用在Linux的IntelliJ IDEA沒有得到任何編譯時或運行時錯誤&。
我對Admin SDK中的線程知之甚少,但我想知道爲什麼在main()的末尾有'while(true){}',並且這是否會影響偵聽器的能力跑。還要在'onCancelled()'中添加一個'System.out.println()'來查看它是否被調用。 –
@BobSnyder他可能正在使用'while(true){}'來防止他的應用程序在*等待網絡響應時終止*。無論如何,奇怪的東西...;) –
@PauloMattos:可能是真的。那麼在Admin SDK中,回調是否在主線程上運行?我猜是的。 –