我试图在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中,回调是否在主线程上运行?我猜是的。 –