当前位置: 首页 > 面试题库 >

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

农波涛
2023-03-14
问题内容

我一直在尝试使用Java(不是Android)和Firebase进行简单用户身份验证。在开始使用Firebase的用户身份验证类之前,我曾尝试使用Java进行简单的保存并在Firebase参考上检索,但没有成功。没有报告错误,但是Firebase中没有任何反应(数据没有更改)。过去,我能够将Firebase与Android
SDK完美集成。我正在将Firebase JAR用于JVM,但没有任何反应。

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();
    }
}

问题答案:

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



 类似资料:
  • 我知道这个问题已经被问过很多次了,一直都有一个答案是关于使用一个可执行的jar或制作一个。exe使用launch4j或类似应用程序。 我可能听起来像个新手,实际上我是。 我一直在用一个Java项目尝试一些东西。我已经成功地制作了一个可执行的jar和一个. exe文件。这都要归功于你之前在SO中的回答:) 但是,我想为Windows创建一个安装程序。例如,按Next 2-3次(显示所有条款和条件等)

  • 问题内容: 我知道这个问题已经被问过很多次了,而且一直有一个答案说明使用可执行jar或使用launch4j或类似应用程序制作.exe。 我听起来像是一个新手,实际上是我。 我一直在尝试Java项目中的一些事情。我已经成功地制作了一个可执行的jar和一个.exe文件。非常感谢您之前在SO中的回答:) 但是,我想为Windows创建一个安装程序。像是,按下一步2至3次(显示所有条款和条件等),然后用户

  • 我正在尝试使用minikube,但我不想安装docker桌面,所以我安装了docker引擎,但有什么方法可以在ubuntu上使用< code > minikube start-driver = docker 和docker引擎吗? 谢谢

  • 我停在一个点上,我需要弹出一个窗口,通知用户他们的约会在15分钟后。当我运行代码时,我得到一个sql错误。非常感谢您的帮助。 我用实时来代替变量,效果很好。当我把变量放回时,我得到下面列出的错误。

  • 在调试模式下启动sdk gphone x86 arm上的lib\main.dart...lib\main.dart 失败:生成失败,出现异常。 null 失败:生成失败,出现异常。 > 其中:构建文件'c:\flutter\flutter.pub-cache\hosted\pub.dartlang.org\flutter_local_notifications-3.0.1+2\android\Bu

  • 在学习这本书的过程中,你已经掌握了很多关于 Git 的命令。虽然这些是在学习过程中不可缺少的,但是版本控制的核心并不是让你学习所有的命令和参数。 当你掌握一些基本的概念,再加上一个带有用户图形界面的应用程序的帮助,就可以让你的日常工作变得更加简单。一个最大的好处就是它会为你提供了一个可视化的用户操作界面。 在桌面应用程序中,很多任务使用起来会更加容易和更方便。并且你也不需要记住那几十个繁琐的 Gi