当前位置: 首页 > 知识库问答 >
问题:

无法将数据写入数据库firebase firestore

傅茂实
2023-03-14

我设法将数据插入身份验证,但无法插入数据库:

代码

fullname = findViewById(R.id.Ifullname);
        password = findViewById(R.id.Ipassword);
        email = findViewById(R.id.Iemail);
        RegisterBtn = findViewById(R.id.button);
        fAuth = FirebaseAuth.getInstance();
        fStore = FirebaseFirestore.getInstance();
        loginBtn = findViewById(R.id.LoginBtn);
RegisterBtn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String FullName = fullname.getText().toString().trim();
                String Password = password.getText().toString().trim();
                String Email = email.getText().toString().trim();
fAuth.createUserWithEmailAndPassword(Email, Password).addOnCompleteListener(new OnCompleteListener<AuthResult>(){
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task){
                        if(task.isSuccessful()){
                            Toast.makeText(Register.this, "User Created.", Toast.LENGTH_SHORT).show();
                            UserID = fAuth.getCurrentUser().getUid();
                            DocumentReference documentReference = fStore.collection("users").document(UserID);
                            Map<String,Object> user = new HashMap<>();
                            user.put("FName", fullname);
                            user.put("Email",email);
                            user.put("Password",password);
//problem seems to be this line  
documentReference.set(user).addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    Log.d(TAG, "onSuccess: user Profile is created");
                                }

                            }).addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                    Log.d(TAG, "onFailure:"+e.toString());

                                }
                            });

错误:

E/AndroidRuntime:致命异常:主进程:com。实例budgetingapp,PID:11507 java。lang.RuntimeException:在类androidx上找到了名称getText的冲突获取程序。appcompat。小装置。AppCompativeText位于com.google.火基。消防商店。util。CustomClassMapper$BeanMapper。(com.google.firebase:firebase-firestore@@21.4.1:629)在。谷歌。火基。消防商店。util。自定义类映射器。loadOrCreateBeanMapperForClass(com.google.firebase:firebase firestore@@21.4.1:377)位于com.google.火基。消防商店。util。自定义类映射器。在com上序列化(com.google.firebase:firebase firestore@@21.4.1:177)。谷歌。火基。消防商店。util。自定义类映射器。在com上序列化(com.google.firebase:firebase firestore@@21.4.1:140)。谷歌。火基。消防商店。util。自定义类映射器。在com上序列化(com.google.firebase:firebase firestore@@21.4.1:104)。谷歌。火基。消防商店。util。自定义类映射器。convertToPlainJavaTypes(com.google.firebase:firebase firestore@@21.4.1:78)位于。谷歌。火基。消防商店。UserDataReader。convertAndParseDocumentData(com.google.firebase:firebase firestore@@21.4.1:231)位于com.google.火基。消防商店。UserDataReader。parseSetData(com.google.firebase:firebase firestore@@21.4.1:75)位于com.google.火基。消防商店。文件参考。在com上设置(com.google.firebase:firebase firestore@@21.4.1:166)。谷歌。火基。消防商店。文件参考。在com上设置(com.google.firebase:firebase firestore@@21.4.1:146)。实例预算应用程序。注册$1$1。com上的onComplete(Register.java:95)。谷歌。Androidgms。任务。zzj。在android上运行(未知来源:4)。操作系统。处理程序。android上的handleCallback(Handler.java:873)。操作系统。处理程序。android上的dispatchMessage(Handler.java:99)。操作系统。活套。android上的loop(Looper.java:193)。应用程序。活动线程。java上的main(ActivityThread.java:6669)。朗。反思。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodAndArgsCaller。在com上运行(RuntimeInit.java:493)。Android内部的操作系统。合子体。main(ZygoteInit.java:858)

共有1个答案

帅博简
2023-03-14

简而言之,您正在尝试将文本字段本身添加到数据库中,而不是添加您创建的字符串。

String FullName = fullname.getText().toString().trim();
String Password = password.getText().toString().trim();
String Email = email.getText().toString().trim();
/* ... */
user.put("FName", fullname);
user.put("Email",email);
user.put("Password",password);

我建议采用一些命名约定来防止这种情况。我个人推荐

Button     #button   -> #btnRegister
Button     #LoginBtn -> #btnLogin
TextField  #fullname -> #txtFullName
TextField  #email    -> #txtEmail
TextField  #password -> #txtPwd

有时,区分私有对象级变量和局部变量也很有用,通常在名称开头添加m(对于my):

mBtnRegister.setOnClickListener(...);
Button btnScripted = new Button(...);

您应该在camelCase(或常量UPPER_SNAKE_CASE)中命名变量,而不是在PascalCase中命名变量,这样它们就不会被错误地识别为类、接口等。通过查看StackOverflow代码块的语法高亮显示,您实际上可以看到这一点。

String fullname = txtFullName.getText().toString().trim();
String password = txtPwd.getText().toString().trim();
String email = txtEmail.getText().toString().trim();
/* ... */
user.put("fname", fullname);
user.put("email", email);
// do not store passwords!

 类似资料:
  • 事情是这样的 我不知道发生了什么,如果有人能帮忙,我会非常感激的。THX!

  • 我是laravel的新手,当我使用单击函数提交表单时出现了一些问题。ajax jquery controller不会将数据保存到数据库,每次响应时都会使用整个html文件。请帮帮我。 关于标题的一些信息 请求URL:http://akshay.laravel/patient1?fname=asdknkl 状态代码:200 OK 远程地址:[::1]:80 推荐人策略:降级时无推荐人 缓存控制:无缓

  • 所以我想在一个控制器中创建两个存储。当我输入时,我确实返回到索引页面,但我提交的数据不存在。然后我看到了我的本地主机,但是我输入的数据也不在那里。当我输入时,没有错误消息。所以我不知道我的错误在哪里。 这是我的看法 createincome.blade.php 这是我的控制器 财务控制人。php 这是我的路线 web.php

  • 问题内容: 我希望我的问题不会很荒谬,因为令人惊讶的是,就流行的网站而言(据我所知)显然还没有真正问过这个问题。 情况是我有几个csv文件,总共包含1个以上的Mio观测值。每个观察结果都包含一个邮政地址。我打算将所有文件读入一个GeoDataFrame中,对地址进行地理编码,在给定shapefile的情况下执行空间连接,并为每行保存来自多边形的一些信息。我想是相当标准的。这是一次性数据清理过程的一

  • null 非常感谢任何指向文档或非常基本的示例的指针。

  • 本文向大家介绍Python实现将数据框数据写入mongodb及mysql数据库的方法,包括了Python实现将数据框数据写入mongodb及mysql数据库的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现将数据框数据写入mongodb及mysql数据库的方法。分享给大家供大家参考,具体如下: 主要内容: 1、数据框数据写入mongdb方法 2、数据框数据写入mysql