如何将Java应用程序中的数据保存到Firebase

3

我正在使用NetBeans编写代码,但运行代码时没有错误,并且数据没有保存在Firebase中。我是根据Google Firebase教程https://firebase.google.com/docs/database/admin/save-data完成的。请问我的代码有什么问题,或者是否有其他更好的方法可以实现这个功能。

package com.recomm.mavenrec.algorithm.firebaseConnection;

import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.auth.FirebaseCredentials;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.recomm.mavenrec.Entity.Book;
import com.recomm.mavenrec.Entity.Hospital;
import java.io.FileInputStream;
import java.io.FileNotFoun## Heading ##dException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;


public class FirebaseConnection {

    public void initiainzeSDK() {
        FileInputStream serviceAccount;
        try {
            serviceAccount = new FileInputStream("myJson.json");
            FirebaseOptions options = new FirebaseOptions.Builder()                        .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
                .setDatabaseUrl("https://adsnavigator-bc363.firebaseio.com/")
                .build();

            FirebaseApp.initializeApp(options);
        } catch (FileNotFoundException foe) {
            System.out.println(foe.getMessage());
        } catch (IOException ioe) {
            System.out.println(ioe.getMessage());
        }
    }

    public void authrnticate() {
        DatabaseReference ref = FirebaseDatabase
            .getInstance()
            .getReference("restricted_access/secret_document");
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
               Object document = dataSnapshot.getValue();
               System.out.println(document);
            }

            @Override
            public void onCancelled(DatabaseError error) {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        });
    }

    public void writeTOFb() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference ref = database.getReference("rec");
        System.out.println(ref);
        DatabaseReference usersRef = ref.child("abc");
        System.out.println(usersRef);
        Map<String, Hospital> users = new HashMap<>();
        users.put("alanisawesome", new Hospital("abc", "sfsf", 1f));
        users.put("gracehop", new Hospital("xyz", "rde", 2f));
        System.out.println(users);
        usersRef.setValue(users);

    }}

`

2个回答

1
您可能忘记将数据库写入规则更改为".write": true,您可以添加此规则并检查已记录的错误。
usersRef.setValue(users, new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
        if (databaseError != null) {
            System.out.println("Data could not be saved " + databaseError.getMessage());
        } else {
            System.out.println("Data saved successfully.");
        }
    }
});

这是我的数据库规则: { "rules": { ".read": "auth != null", ".write": "auth != null" } } - S mahat
您正在连接为管理员,不需要特殊权限来读写,但尝试更改规则为{ "rules": { ".read": true, ".write": true } } - Oussema Aroua
兄弟,我刚刚改了规则,但问题仍然存在。现在我该怎么办? - S mahat
添加oncomplete方法后没有日志吗? - Oussema Aroua

0
这是因为程序在 Firebase 操作完成之前终止了。您可以尝试在程序中添加一个定时器任务或线程,以便应用程序不会被终止。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接