我正在尝试使用Firebase为Java桌面应用程序构建后端

我正在尝试使用Firebase为Java桌面应用程序构建后端,java,netbeans,firebase,Java,Netbeans,Firebase,几天来,我一直在尝试使用Java(而不是Android)和Firebase进行简单的用户身份验证。在我开始使用Firebase的用户身份验证类之前,我尝试使用Java对我的Firebase引用进行简单的保存和检索,但没有成功。未报告任何错误,但Firebase中未发生任何事件(数据未更改)。在过去,我能够毫无问题地将Firebase与Android SDK集成。我正在为JVM使用Firebase JAR,但什么都没有发生 import com.firebase.client.AuthData;

几天来,我一直在尝试使用Java(而不是Android)和Firebase进行简单的用户身份验证。在我开始使用Firebase的用户身份验证类之前,我尝试使用Java对我的Firebase引用进行简单的保存和检索,但没有成功。未报告任何错误,但Firebase中未发生任何事件(数据未更改)。在过去,我能够毫无问题地将Firebase与Android SDK集成。我正在为JVM使用Firebase JAR,但什么都没有发生

import com.firebase.client.AuthData;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;

/**
 *
 * @author Chidi
 */
public class Auth {
    private final Firebase usersRef;
    private boolean isNewUser = false;
    private String uid = null;
    private HashMap<String, Object> userHash;

    public Auth() {
        Firebase rootRef = new Firebase("https://tranzchat.firebaseio.com/");
        this.usersRef = rootRef.child("users");  
        userHash = new HashMap<>();
    }

    public void createUser(final String email, final String password, String name, String default_lang) {
        userHash.put("email", email);
        userHash.put("password", this.hashPassword(password));
        userHash.put("name", name);
        userHash.put("default_lang", default_lang);
        Vars.dbcon.createUser(email, password, new Firebase.ResultHandler() {
            @Override
            public void onSuccess() {
                System.out.println("Created the new user");
                // Sets isNewUser to true after creating the new user
                isNewUser = true;
                signIn(email, password);
                if(uid != null) {
                    // Try to store use information
                    Firebase newUserRef = usersRef.child(uid);
                    newUserRef.setValue(userHash, new Firebase.CompletionListener(){
                        @Override
                        public void onComplete(FirebaseError fe, Firebase frbs) {
                            System.out.println("Completed Database Insertion");
                        }

                    });
                } else {
                    System.out.println("Could not retrieve UID");
                }
            }

            @Override
            public void onError(FirebaseError fe) {
                System.out.println("An error occured while creating the user.");
            }
        });
    }

    public void signIn(String email, String password) {
        Vars.dbcon.authWithPassword(email, password, new Firebase.AuthResultHandler() {
            @Override
            public void onAuthenticated(AuthData authData) {
                uid = authData.getUid();
                if(!isNewUser) {
                    // Try to get new user information and store it in the user object
                    usersRef.child(uid).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot snapshot) {
                            userHash = (HashMap<String, Object>) snapshot.getValue();
                        }
                        @Override
                        public void onCancelled(FirebaseError firebaseError) {
                            System.out.println("The read failed: " + firebaseError.getMessage());
                        }
                    });
                }
            }
            @Override
            public void onAuthenticationError(FirebaseError firebaseError) {
                // there was an error
            }
        });
    }
    public String hashPassword(String password) {
        String md5 = null;
        if(password == null) return null;
        try {
            // Create MessageDigest object for MD5
            MessageDigest digest = MessageDigest.getInstance("MD5");
            // Update input string in message digest
            digest.update(password.getBytes(), 0, password.length());
            // Converts message digest value in base 16 (hex)
            md5 = new BigInteger(1, digest.digest()).toString();
        } catch(NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return md5;
    }

    // Test Suite
    public static void main(String[] args) throws InterruptedException {
        Vars.init();
        Thread firebaseAuth = new Thread(new Runnable() {
            @Override
            public void run() {
                Auth au = new Auth();
                au.createUser("chidiebere.nnadi@gmail.com", "password", "Chidiebere Nnadi", "en");
            }
        });
        firebaseAuth.start();
        firebaseAuth.join();
    }
}
导入com.firebase.client.AuthData;
导入com.firebase.client.DataSnapshot;
导入com.firebase.client.firebase;
导入com.firebase.client.firebase错误;
导入com.firebase.client.ValueEventListener;
导入java.math.biginger;
导入java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
导入java.util.HashMap;
/**
*
*@作者奇迪
*/
公共类身份验证{
私有最终Firebase用户SREF;
私有布尔值isNewUser=false;
私有字符串uid=null;
私有HashMap-userHash;
公共授权(){
Firebase rootRef=新的Firebase(“https://tranzchat.firebaseio.com/");
this.usersRef=rootRef.child(“用户”);
userHash=newhashmap();
}
public void createUser(最终字符串电子邮件、最终字符串密码、字符串名称、字符串默认值){
userHash.put(“email”,email);
userHash.put(“password”,this.hashPassword(password));
userHash.put(“name”,name);
put(“default\u lang”,default\u lang);
Vars.dbcon.createUser(电子邮件、密码、新Firebase.ResultHandler(){
@凌驾
成功时的公共无效(){
System.out.println(“创建了新用户”);
//创建新用户后,将isNewUser设置为true
isNewUser=true;
登录(电子邮件、密码);
如果(uid!=null){
//尝试存储使用信息
Firebase newUserRef=usersRef.child(uid);
newUserRef.setValue(userHash,new Firebase.CompletionListener(){
@凌驾
未完成公共空隙(Firebase错误fe、Firebase frbs){
System.out.println(“已完成的数据库插入”);
}
});
}否则{
System.out.println(“无法检索UID”);
}
}
@凌驾
公共无效onError(FirebaseError fe){
System.out.println(“创建用户时出错。”);
}
});
}
公共无效登录(字符串电子邮件、字符串密码){
Vars.dbcon.authWithPassword(电子邮件、密码、新Firebase.AuthResultHandler(){
@凌驾
已验证的公用void(AuthData AuthData){
uid=authData.getUid();
如果(!isNewUser){
//尝试获取新用户信息并将其存储在用户对象中
usersRef.child(uid).addValueEventListener(新的ValueEventListener(){
@凌驾
公共无效onDataChange(数据快照快照){
userHash=(HashMap)snapshot.getValue();
}
@凌驾
取消后的公共无效(FirebaseError FirebaseError){
System.out.println(“读取失败:+firebaseError.getMessage());
}
});
}
}
@凌驾
AuthenticationError上的公共无效(FirebaseError FirebaseError){
//有一个错误
}
});
}
公共字符串hashPassword(字符串密码){
字符串md5=null;
if(password==null)返回null;
试一试{
//为MD5创建MessageDigest对象
MessageDigest=MessageDigest.getInstance(“MD5”);
//更新消息摘要中的输入字符串
update(password.getBytes(),0,password.length());
//转换基16(十六进制)中的消息摘要值
md5=新的BigInteger(1,digest.digest()).toString();
}捕获(无算法异常){
e、 printStackTrace();
}
返回md5;
}
//测试套件
公共静态void main(字符串[]args)引发InterruptedException{
Vars.init();
线程firebaseAuth=new线程(new Runnable(){
@凌驾
公开募捐{
Auth au=新的Auth();
au.createUser(“chidiebere。nnadi@gmail.com","密码","Chidiebere Nnadi","en",;
}
});
firebaseAuth.start();
firebaseAuth.join();
}
}

我刚刚发现了它的问题。该线程在Firebase调用onComplete函数之前结束。您可以在应用程序中最后一行代码之后的循环中调用
线程。sleep(x_ms)

我刚刚发现了它的问题。该线程在Firebase调用onComplete函数之前结束。您可以在应用程序中最后一行代码之后的循环中调用
线程。sleep(x_ms)

您应该在
onComplete
回调中处理错误。Firebase可能报告了一个错误,但您只是忽略了它。请看下面的例子:@FrankvanPuffelen这不是问题所在。我在每个地方都进行了充分的错误检查,错误应该会弹出,但我没有看到错误。我尝试在Complete上检查错误,但仍然没有显示任何内容。您应该在
onComplete
回调中处理错误。Firebase可能报告了一个错误,但您只是忽略了它。请看下面的例子:@FrankvanPuffelen这不是问题所在。我把足够的