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

Android studio Firebase-无法写入数据

钦永贞
2023-03-14

我正在尝试将有关集合用户中注册用户的数据写入我的Cloud Firestone用户,当然它必须与授权中的UID代码相关联(注册/登录系统正常工作并在我的Firebase中编写auth)。

XML注册按钮:

<Button
    android:id="@+id/RegisterBtn"
    android:layout_width="0dp"
    android:layout_height="51dp"
    android:layout_marginStart="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="92dp"
    android:layout_marginEnd="16dp"
    android:layout_marginRight="16dp"
    android:text="REGISTER"
    app:backgroundTint="#870404"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/Password" />

JAVA寄存器:

...
FirebaseFirestore database;
String userID;
...

database = FirebaseFirestore.getInstance();

mRegisterBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = mFullName.getText().toString().trim();
                String email = mEmail.getText().toString().trim();
                String password = mPassword.getText().toString().trim();
                String confirmPassword = mconfirmPassword.getText().toString().trim();

。。。

//REGISTER THE USER
                fAuth.createUserWithEmailAndPassword(email,password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                    @Override
                    public void onSuccess(AuthResult authResult) {
                        startActivity(new Intent(getApplicationContext(),MainActivity.class));
                        finish();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(Register.this, "Error!" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });

                //FIRECLOUD INSERT DATA
                //GET ID FROM AUTH
                userID = fAuth.getCurrentUser().getUid();
                saveOnFireCloud(userID,name,email);


            }
        });

。。。

 private void saveOnFireCloud(String userID, String name, String email) {
        Map<String,Object> mappa = new HashMap<>();
        mappa.put("id",userID);
        mappa.put("name",name);
        mappa.put("email",email);
        database.collection("Users").document(userID).set(mappa)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Toast.makeText(Register.this, "Data Inserted!", Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(Register.this, "Error Inserting Data!" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }

在Cloud Firestone中,我刚刚创建了集合用户。我注意到在工具中

  • ✓ 已连接

但即使我已经点击并似乎构建正确,底部的“将云Firestone添加到你的应用程序”按钮仍然会出现,而不是✓

我是否以正确的方式开发了链接UID的步骤?当我单击注册按钮时,在运行时没有收到错误,Auth用户被创建,但用户数据保持空白...我真的很生气,我只是被困在这一步!

提前感谢您的回答!!

编辑:

非常感谢你的回答,弗兰克。是的,如果我在内部设置断点:private void saveOnFireCloud(String userID、String name、String email)

这是以下行的结果:database.collection("用户"). Document(userID). set(mappa):

this = { Register@17322 } 
userID = "YVI9zPC2VJbpd4JpMCeBOZNDsbD2" 
name = "a" email = "test@gmail.com" 
mappa = {HashMap@17356} 
size = 3 
database = {FirebaseFirestone@17357} 

但如果我设置2个断点

public void onComplete(@NonNull Task<Void> task) { and public void onFailure(@NonNull Exception e) 

调试跳过...数据不知道...

共有1个答案

郎恺
2023-03-14

我通过替换方法解决了这个问题:

database.collection("Users").document(userID).set(mappa)

使用方法:

database.collection("Users").add(mappa)

似乎是。set(Hashmap)方法可以仅用于替换现有对象,而不是方法。add(Hashmap)将对象添加到数据库。我在集合中正确插入了该记录。

顺便说一句,现在我又卡在这个问题上了,我试着再次测试它,现在,没有在Firebase Cloud中插入数据。当我单击继续时,什么都没有发生!只是在控制台“帧不可用”

已解决2.0:Android studio似乎存在现金漏洞,要解决此问题,请取消C:\Users\PIDIOTTO\AppData\Roaming\Google中的AndroidStudio文件夹,然后重新启动Android studio!:)

 类似资料:
  • 我设法将数据插入身份验证,但无法插入数据库: 代码: 错误: E/AndroidRuntime:致命异常:主进程:com。实例budgetingapp,PID:11507 java。lang.RuntimeException:在类androidx上找到了名称getText的冲突获取程序。appcompat。小装置。AppCompativeText位于com。谷歌。火基。消防商店。util。Cust

  • 我正在尝试用Firebase制作一个简单的Android应用程序。 目前,我只是试图从Firebase实时保存用户数据库。但由于某种原因它不起作用。另一方面,身份验证工作完美。 数据库本身没有显示任何内容。它总是显示“null” 我一直在关注这个YouTube教程,并一直在做一些类似的事情。 当我尝试创建一个用户并将其发送到数据库时,运行的程序没有给出任何答案。我有一个进度条,一旦setValue

  • 问题内容: 我正在尝试从applet编写示例文件,但无法正常工作。下面是代码。 小程序 的HTML 我也没有得到任何错误。请指教。 问题答案: 这是因为小程序位于其自己的沙箱中,在沙箱中它们需要特殊权限才能执行某些操作,例如读取或写入客户端计算机的磁盘。记住,小程序是在客户端计算机的上下文中执行的,它们是客人并且需要遵循内部规则 查看小程序可以做什么和不能做什么以获取更多详细信息

  • 我有一个应用程序使用外部存储来存储照片。根据需要,在其清单中请求以下权限 并使用以下方法检索所需的目录 在我的一部测试手机(Android one)升级到6之后,它在尝试创建必需的目录“/sdcard/pictures/myapp-yy-mm”时返回了一个错误。 sd卡配置为“便携式存储”。我已经格式化了sd卡。我已经把它换掉了。我重新启动了。都是徒劳。 此外,内置的android截图功能(通过电

  • 理想情况下,我想在localhost上记录开发过程中的一切,只记录实时服务器上的错误。我在我的开发平台(Windows 10,JavaWicket)上无法登录文件。 log4j2.xml 我已经设法得到一些日志写入我tomcat的文件夹。 只有我的一些信息出现了。我不知道什么符号有意义,什么符号没有意义。 可公开访问页面的基页记录子类。 [信息]2017-10-19 17:07:13.208[ht

  • 我正在GKE上创建一个nginx入口。 在每次重新加载事件中,我的控制器打印到日志: I1019 13:23:31.679126 6控制器。go:145]“检测到配置更改,需要后端重新加载”I1019 13:23:31.776558 6控制器。转到:162]“后端成功重新加载”I1019 13:23:31.776897 6事件。go:282]事件(v1.ObjectReference{种类:“Po