首页 > 解决方案 > 使用 android studio 写入实时数据库

问题描述

我正在讨论这个应用程序,我想注册用户并将他们保存在 firebase 中。这是我的代码:

package com.example.jimax_project;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;

import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.HashMap;
import java.util.Map;

public class AuthActivity extends AppCompatActivity {
private EditText mEditTextName;
private EditText mEditTextEmail;
private EditText mEditTextPassword;


//TAGS DE LOS DATOS A REGISTRAR;
private String name= "";
private String email= "";
private String password= "";

FirebaseAuth mAuth;
DatabaseReference mDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_auth);

    Button mButtonRegister;

    mAuth = FirebaseAuth.getInstance();
    mDatabase = FirebaseDatabase.getInstance().getReference();

    mEditTextName = (EditText)findViewById(R.id.editTextName);
    mEditTextEmail = (EditText)findViewById(R.id.EditTextEmail);
    mEditTextPassword = (EditText)findViewById(R.id.EditTextPassword);
    mButtonRegister = (Button)findViewById(R.id.btnRegister);

    mButtonRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            name = mEditTextName.getText().toString();
            email = mEditTextEmail.getText().toString();
            password = mEditTextPassword.getText().toString();

            if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty()){
                if(password.length()>=6) {
                    registerUser();
                }
                else {
                    Toast.makeText(AuthActivity.this,"La contraseña debe tener almenos 6 caracteres",Toast.LENGTH_SHORT).show();
                }
            }
            else{
                Toast.makeText(AuthActivity.this,"Debe completar los campos",Toast.LENGTH_SHORT).show();
            }
        }
    });
}
private void registerUser(){
    mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()){

                Map<String, Object> map = new HashMap<>();
                map.put("name",name);
                map.put("email",email);
                map.put("password",password);

                String id = mAuth.getCurrentUser().getUid();

                mDatabase.child("Users").child(id).setValue(map).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task2) {
                        if (task2.isSuccessful()){
                            startActivity(new Intent(AuthActivity.this,ProfileActivity.class));
                            finish();
                        }
                        else {
                            Toast.makeText(AuthActivity.this,"No se puedieron crear los datos correctamente",Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
            else{
                Toast.makeText(AuthActivity.this,"No se pudo registrar el usuario",Toast.LENGTH_SHORT).show();
            }
        }
    });
}

}

问题是,当您按下注册按钮时,身份验证在 firebase 中完成,但数据未在应用程序应创建的数据库(用户表)中注册

当我按下“注册”按钮时,会出现在日志中:

2021-09-07 15:03:56.998 7135-7299/com.example.jimax_project W/System: Ignoring header X-Firebase-Locale because its value was null.
2021-09-07 15:03:58.344 7135-7299/com.example.jimax_project W/System: Ignoring header X-Firebase-Locale because its value was null.
2021-09-07 15:03:58.649 7135-7299/com.example.jimax_project D/FirebaseAuth: Notifying id token listeners about user ( B3G6IL3ThuXk0OrO32uA9QKcgMz2 ).
2021-09-07 15:03:58.650 7135-7299/com.example.jimax_project D/FirebaseAuth: Notifying auth state listeners about user ( B3G6IL3ThuXk0OrO32uA9QKcgMz2 ).

我一直在寻找,并且我在firebase中将安全设置为true,我尝试在清单中添加android行:usesCleartextTraffic =“true”,并且我还声明了互联网权限,我不知道是什么否则我可以测试。

我将不胜感激任何帮助,谢谢

标签: javaandroidfirebasefirebase-realtime-database

解决方案


您的“姓名”、“电子邮件”和“密码”不是对象,它们是字符串。
您必须在地图中使用字符串,而不是对象。
见下文:
Map<String, Object> map = new HashMap<>();- 错误
Map<String, String> map = new HashMap<>();- 正确

用“字符串”替换你的“对象”,一切都应该正常。
谢谢


推荐阅读