我正在尝试使用一个用Java编写的桌面应用程序将数据保存到Firebase。但是,由于某些原因,它不起作用,我一直在这里提供的文档:https://firebase.google.com/docs/database/admin/save-data。找不到任何视频教程的问题,所有视频都是网络或移动相关的。基本上,我想创建一个名为Venda的对象,它有3个属性(ID、data、valor),然后将它保存在FireBase上。谢谢!
主要方法如下:
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
System.out.println("--------- Begin of Output ---------");
Firebase firebase = new Firebase();
VendasCRUD venda = new VendasCRUD(firebase);
venda.createVenda(new Venda(0, "23/05/1993", 45.67));
System.out.println("----------- End of Output -----------");
}
}
Firebase连接:
public class Firebase {
public Firebase() throws FileNotFoundException, IOException {
FileInputStream serviceAccount = new FileInputStream("C:\\Users\\Alex\\Documents\\NetBeansProjects\\SEMS\\src\\main\\java\\br\\com\\sems\\firebase\\sems-firebase.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://sems-firebase.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
}
public DatabaseReference getDataBaseReference() {
return FirebaseDatabase.getInstance().getReference();
}
}
Venda类:
public class Venda {
public int ID;
public String data;
public double valor;
public Venda(int ID, String data, double valor) {
this.ID = ID;
this.data = data;
this.valor = valor;
}
@Override
public String toString() {
return ID + "," + data + "," + valor;
}
}
数据库信息:
为了测试的目的,现在规则被设置为公共的。
更新:
好吧,在尝试了FrankVanPuffelen评论中的建议之后,我仍然无法保存或读取FireBase中的数据。为了测试的目的,我做了一个更简单的代码。代码如下:
public class Main {
private static final String DATABASE_URL = "https://sems-firebase.firebaseio.com/";
private static DatabaseReference database;
private static boolean finished = false;
public static void startListeners() {
database.child("posts").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Post post = dataSnapshot.getValue(Post.class);
System.out.println(post);
finished = true;
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
while(!finished);
}
public static void main(String[] args) throws FileNotFoundException {
try {
FileInputStream serviceAccount = new FileInputStream("sems-firebase.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl(DATABASE_URL)
.build();
FirebaseApp defaultApp = FirebaseApp.initializeApp(options);
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance(defaultApp);
System.out.println(defaultDatabase.getReference().toString());
} catch (IOException e) {
System.out.println("ERROR: invalid service account credentials. See README.");
System.out.println(e.getMessage());
System.exit(1);
}
// Shared Database reference
database = FirebaseDatabase.getInstance().getReference();
// Start listening to the Database
startListeners();
}
}
所以我一直在做的是,我运行代码,然后转到数据库url并手动编辑一篇文章,我希望在控制台上得到我刚才编辑的文章的打印,但是什么也没有发生。
更新2
我相信这里提出的:为什么Firebase Java SDK不能在设置后终止?不推荐使用,因为如果我尝试,代码如下所示:
我试着把它修改成这样:
public static void startListeners() throws InterruptedException {
DatabaseReference database = FirebaseDatabase.getInstance().getReference("posts/adad2131/author");
CountDownLatch done = new CountDownLatch(1);
database.setValue("Test", new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError de, DatabaseReference dr) {
done.countDown();
}
});
done.await();
}
但是onComplete方法永远不会执行,程序也永远不会完成。至于这里提出的内容:Java Firebase:延迟退出直到写入完成也可能不推荐使用,因为CompletionListener()似乎不再存在于Firebase中,但我可以在DatabaseReference中找到它,所以我将代码修改为:
private static final String DATABASE_URL = "https://sems-firebase.firebaseio.com/";
public static void startListeners() throws InterruptedException {
DatabaseReference database = FirebaseDatabase.getInstance().getReference("posts/adad2131/author");
final AtomicBoolean done = new AtomicBoolean(false);
database.setValue("Test", new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError de, DatabaseReference dr) {
done.set(true);
}
});
while (!done.get());
}
与前面一样,onComplete方法永远不会被执行,程序永远不会完成或设置数据库中的数据。下面是我试图修改的帖子的快照:
更新3
因此我简化了代码以方便使用。为了确保我从项目的服务帐户面板生成了一个新的私钥,下面是我如何初始化应用程序的:
try {
FileInputStream serviceAccount = new FileInputStream("sems-firebase-firebase-adminsdk-gamnp-874087bbd1.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://sems-firebase.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
} catch (IOException e) {
System.out.println("ERROR: invalid service account credentials.");
System.out.println(e.getMessage());
System.exit(1);
}
这里是数据库的快照,我试图更改的值是id为“adad2131”的post的author字段。
我尝试用“posts/adad2131/author”、“/posts/adad2131/author”或简单地“adad2131/author”引用该字段,也许我引用错了?
以下是完整的代码:
public class Main {
public static void main(String[] args) throws FileNotFoundException, InterruptedException {
try {
FileInputStream serviceAccount = new FileInputStream("sems-firebase-firebase-adminsdk-gamnp-874087bbd1.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://sems-firebase.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
} catch (IOException e) {
System.out.println("ERROR: invalid service account credentials.");
System.out.println(e.getMessage());
System.exit(1);
}
//Try to change data in Firebase
CountDownLatch done = new CountDownLatch(1);
FirebaseDatabase.getInstance().getReference("posts/adad2131/author").setValue("Test", new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError de, DatabaseReference dr) {
done.countDown();
}
});
done.await();
}
}
ps.我也在使用admin sdk 5.9
我只是使用Firebase Admin SDK5.9将您的代码复制到一个项目中并运行它,它写入数据库时没有任何问题。
CountDownLatch done = new CountDownLatch(1);
FirebaseDatabase.getInstance().getReference("49723347").setValue("Test", new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError de, DatabaseReference dr) {
done.countDown();
}
});
done.await();
您可以在这里看到结果:https://stackoverflow.firebaseio.com/49723347.json
引用49723347
是我的数据库中的路径(它是您的问题的ID)。我没有做其他改变。
所以问题似乎不在我们一直在看的代码中。以下是我初始化应用程序的方法:
FileInputStream serviceAccount = new FileInputStream("stackoverflow-3d9889aaeddb.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://stackoverflow.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
您确定该配置是要编写的项目的配置吗?
我正试图从解析通过模拟器中提取一个PDF文件,并保存到我的桌面上,当我的应用程序上的一个按钮被点击时。问题是,无论我做什么,文件不会出现在桌面或其他任何地方。我正在对下载按钮使用此方法 无法将其保存到桌面。
我创建了一个简单的应用程序,裁剪图像。现在我想保存这个图像到消防基地。 如何将此图像保存到Firebase。我尝试了很多教程,但都没有成功。请用简单的代码验证。
我有一个小应用程序,用户可以根据球员最近在各种运动中的表现,对他们进行升票或降票。 当upvote按钮当前被点击时,投票者的UID(通过Google登录)应该被推入被投票的相应玩家的数据库中。像这样: 下面是执行Firebase工作的代码。我相信我错了其中一句台词。
问题内容: 检索数据有效,但是我无法将检索到的数据保存到ArrayList中。在“ onDataChanged()”方法之后,ArrayList“配置文件”似乎具有2个值,但在return语句中它具有0个值。 问题答案: 您现在无法返回尚未加载的内容。换句话说,您不能简单地在方法之外返回列表,因为它总是由于该方法的异步行为而引起的。这意味着,当您尝试返回该方法之外的结果时,数据尚未完成从数据库的加
Im使用firebase,由于某些原因,我的代码没有推送数据,并且Im没有在firebase URL中看到数据。我的密码是这样的 我得到警报“保存”,但我无法在firebase URL中找到数据。 此外,为Firebase中的每个url提供的API键有什么用途。 更新:这种情况发生在IE10中。在其他浏览器中,它工作得很好
问题内容: 我有一个Java类,正在使用iText库生成PDF文件。现在,根据我的需要,我必须将生成的PDF文件保存到MySQL数据库表中,但是我不知道该怎么做。 我担心的是: 我应该在PDF表的MySQL列中使用哪种 数据类型 来保存PDF文件 哪个查询会将生成的PDF文件插入数据库 目前,我正在生成PDF文件,并将其存储到本地磁盘的硬编码文件路径中。 这是我的Java PDF生成代码: 请帮我