我正在尝试在Java应用中实施Firebase管理SDK。我想向孩子添加childeventlistener
,当孩子添加时我想要带孩子的价值并存储到系统剪贴板中。到目前为止,这是我的main.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;
}
}
我面临的问题:
当孩子被添加到数据库时,代码shoud触发addChildeventlistner但是没有发生。
我可以将数据写入数据库并且还可以对其进行检索,因此firebase-admin设置没有问题。
注意:没有得到任何编译时或运行时错误&我在linux中使用intellij的想法。
答案 0 :(得分:0)
您需要添加一个将无参数的构造函数添加到cliptext
类。 Firebase documentation明确了这一点:
该类必须具有不带参数的默认构造函数
该类必须为要分配的属性定义公共getter。没有公共getter的属性将在反序列化实例时设置为默认值
可能无法修复所有您的问题,但您最终也需要这样做;)
答案 1 :(得分:0)
我不确定,但我希望Admin SDK类似于客户端SDK,其中监听器回调在" main"线程。
在方法main()
结束时,您有一个忙等待循环while (true){}
。您可能会这样做是为了防止main()
完成,这会导致您的应用终止。这样做完全占据主线程,永远不会给听众一个运行的机会。您需要找到另一种方法来暂停main()
以使回调有机会运行。