Firebase 实时数据库未更新 // 数据未添加到 Firebase 实时数据库

Posted

技术标签:

【中文标题】Firebase 实时数据库未更新 // 数据未添加到 Firebase 实时数据库【英文标题】:Firebase Realtime Database not getting updated // Data not getting added to the Firebase Realtime Database 【发布时间】:2021-10-04 08:49:20 【问题描述】:

所以我正在制作一个聊天应用程序,我遇到了一个问题,我试图将用户详细信息添加到我的实时数据库中,但它无法正常工作,因此我稍后可以将它们显示给登录用户

这是我的注册活动

public class RegisterActivity extends AppCompatActivity 

    EditText username;
    EditText email;
    EditText password;
    Button registerButton;
    TextView oldMember;

    FirebaseAuth auth;
    DatabaseReference myRef;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);


        username = findViewById(R.id.usernameEditText);
        email = findViewById(R.id.emailEditText);
        password = findViewById(R.id.passwordEditText);
        registerButton = findViewById(R.id.RegisterButton);
        oldMember = findViewById(R.id.LoginTextView);

        
        auth = FirebaseAuth.getInstance();
        myRef = FirebaseDatabase.getInstance().getReference("MyUsers");



        registerButton.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                String usernameText = username.getText().toString();
                String emailText = email.getText().toString();
                String passwordText = password.getText().toString();

                if(TextUtils.isEmpty(usernameText) || TextUtils.isEmpty(emailText) || TextUtils.isEmpty(passwordText))
                    Toast.makeText(RegisterActivity.this, "Please Fill the Required Info", Toast.LENGTH_SHORT).show();
                 else 
                    Register(usernameText, emailText, passwordText);
                



            
        );

        
        oldMember.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
                startActivity(intent);
                finish();
            
        );
    



    private void Register(String username, String email, String password)
        auth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() 
                    @Override
                    public void onComplete(@NonNull @org.jetbrains.annotations.NotNull Task<AuthResult> task) 
                        if(task.isSuccessful())
                            FirebaseUser firebaseUser = auth.getCurrentUser();
                            String userid = firebaseUser.getUid();

                            myRef = FirebaseDatabase.getInstance()
                                    .getReference("MyUsers")
                                    .child(userid);


                            HashMap<String, String> hashMap = new HashMap<>();
                            hashMap.put("id", userid);
                            hashMap.put("username", username);
                            hashMap.put("imageURL", "default");
                            

                            myRef.setValue(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() 
                                @Override
                                public void onComplete(@NonNull @NotNull Task<Void> task) 
                                    if(task.isSuccessful())
                                        Intent intent = new Intent(getApplicationContext(), MainHomeActivity.class);
                                        //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                                        startActivity(intent);
                                        finish();
                                    
                                
                            );

                         else 
                            Toast.makeText(RegisterActivity.this, "Invalid Email or Password", Toast.LENGTH_SHORT).show();
                        
                    
                );
    

this is how my realtime database looks like

这些是我的实时数据库规则

  "rules": 
    ".read": true,
    ".write": true
  

我将不胜感激!

【问题讨论】:

注册后到MainHomeActivity了吗? 您是否收到任何错误消息? 您是否尝试检查如果 Tasks 对象不成功会发生什么?请回复@AlexMamo @TicherhazFreePalestine 不,它没有,那是当我意识到数据甚至没有被添加到 firebase 实时数据库时。 @TarikHuber 不,没有。 @AlexMamo 是的,我做到了,实际上并没有出现太多。谢谢大家的回复,我设法让它“修复”了在将 google-services.json 文件添加到我的 android 项目之前,一旦我完成了所有工作,一切都很好! 由于某种原因,在启用实时数据库之前添加了 json 文件,然后再启用它使东西无法正常工作,即使我后来确实重新下载了它,有点奇怪。 【参考方案1】:

而不是使用 HashMap 将数据添加到 firebase 实时数据库

 myRef = FirebaseDatabase.getInstance()
                                .getReference("MyUsers")
                                .child(userid);


                        HashMap<String, String> hashMap = new HashMap<>();
                        hashMap.put("id", userid);
                        hashMap.put("username", username);
                        hashMap.put("imageURL", "default");

为信息创建一个模型类

给定信息的示例模型类

public class userRegisteration()
 Sting id;
 String username;
 String imageURL;

      //to add details it needs an empty constructor
      userRegisteration()

      userRegisteration(String id,String username,String imageURL)
        this.id = id;
        this.username = username;
        this.imageURL = imageURL;
      
      public void setID(String id)this.id = id
      public void setUsername(String username)this.username= username
      public void setImgeURL(String imageURL)this.imageURL = imageURL

      public String getID()return id
      public String getUsername()return username
      public String getImageURL()return imageURL


相信我会起作用的

【讨论】:

以上是关于Firebase 实时数据库未更新 // 数据未添加到 Firebase 实时数据库的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 实时数据库安全规则允许更新但未设置

添加数据时,Firebase 列表视图未实时显示

Firebase 实时数据库未连接

数据未插入 Firebase 实时数据库抛出 Android

数据未从 Android 应用程序写入 Firebase 实时数据库

实时数据库未将数据推送到 Firebase