无法从应用程序向 Firebase 实时数据库添加数据

美度博士

我尝试在使用 Firebase 身份验证、实时数据库和存储的教程中练习,我在这个练习中走了很长一段路,直到出现这个问题,我成功地将电子邮件和密码存储在身份验证中,并显示在 firebase 控制台上,但问题是使用数据库,它应该在其上存储以下 HashMap,但 firebase 实时控制台上没有显示任何内容

在此处输入图片说明

在此处输入图片说明

规则

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

登录类

class LoginFragment : Fragment(R.layout.fragment_login) {

    private var _binding: FragmentLoginBinding? = null
    private var firebaseUser: FirebaseUser? = null
    private lateinit var mAuth: FirebaseAuth

    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {

        _binding = FragmentLoginBinding.inflate(inflater, container, false)
        return binding.root

    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        mAuth = FirebaseAuth.getInstance()
        firebaseUser = FirebaseAuth.getInstance().currentUser

        if(firebaseUser != null){
            val action = LoginFragmentDirections.actionLoginFragmentToMainFragment()
            findNavController().navigate(action)
        }

        binding.apply {
            btnlogin.setOnClickListener {
                loginUser()
            }

            textViewSignUp.setOnClickListener {
                val action = LoginFragmentDirections.actionLoginFragment2ToRegisterFragment2()
                findNavController().navigate(action)
            }
        }




    }

    private fun loginUser() {
        val email: String = binding.inputEmail.text.toString()
        val password: String = binding.inputPassword.text.toString()

        if (TextUtils.isEmpty(email) || TextUtils.isEmpty(password)
        ) {
            binding.apply {
                inputEmail.error = "Email cannot be empty"
                inputPassword.error = "Password cannot be empty"
            }

        }else {
            mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener{ task->

                if(task.isSuccessful){
                    val action = LoginFragmentDirections.actionLoginFragmentToMainFragment()
                    findNavController().navigate(action)

                }else {
                    Toast.makeText(requireContext(), "Error ${task.exception?.message.toString()}", Toast.LENGTH_SHORT).show()
                }

            }
        }
    }

}

注册类

class RegisterFragment : Fragment(R.layout.fragment_register) {
    private var _binding: FragmentRegisterBinding? = null
    private lateinit var mAuth: FirebaseAuth
    private lateinit var refUsers: DatabaseReference

    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {

        _binding = FragmentRegisterBinding.inflate(inflater, container, false)


        return binding.root

    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        mAuth = FirebaseAuth.getInstance()

        binding.apply {
            btnRegister.setOnClickListener {
                registerUser()
            }

            alreadyHaveAccount.setOnClickListener {
                findNavController().navigate(RegisterFragmentDirections.actionRegisterFragment2ToLoginFragment2())
            }


        }


    }

    private fun registerUser() {
        val userName: String = binding.inputUsername.text.toString()
        val email: String = binding.inputEmail.text.toString()
        val password: String = binding.inputPassword.text.toString()
        val confirmedPassword: String = binding.inputConformPassword.text.toString()

        if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(email)
            || TextUtils.isEmpty(password) || TextUtils.isEmpty(confirmedPassword)
        ) {
            binding.apply {
                inputUsername.error = "Username cannot be empty"
                inputEmail.error = "Email cannot be empty"
                inputPassword.error = "Password cannot be empty"
                inputConformPassword.error = "Confirmed password cannot be empty"
            }
        } else if (!password.equals(confirmedPassword, ignoreCase = false)) {
            Snackbar.make(
                requireView(),
                "The Password and confirmation do not match", Snackbar.LENGTH_LONG
            ).show()
        } else {
            mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener { task ->
                    if (task.isSuccessful) {

                        val action =
                            RegisterFragmentDirections.actionRegisterFragmentToMainFragment()

                        val firebaseUserID = mAuth.currentUser!!.uid



                        refUsers = FirebaseDatabase.getInstance().reference
                            .child(firebaseUserID)


                        val userHashMap = HashMap<String, Any>()
                        userHashMap["uid"] = firebaseUserID
                        userHashMap["username"] = userName
                        userHashMap["profile"] =
                            "https://firebasestorage.googleapis.com/v0/b/mig33-94625.appspot.com/o/icons8-test-account-100.png?alt=media&token=ce231b05-d4a7-49cb-8003-027e0d5c76e1"
                        userHashMap["cover"] =
                            "https://firebasestorage.googleapis.com/v0/b/mig33-94625.appspot.com/o/cover.jpg?alt=media&token=6bbcf0fb-77d1-4870-b714-aa13eedff86c"
                        userHashMap["status"] = "offline"
                        userHashMap["search"] = userName.lowercase()
                        userHashMap["facebook"] = "https://m.facebook.com"
                        userHashMap["instagram"] = "https://m.instagram.com"
                        userHashMap["website"] = "https://www.google.com"

                        refUsers.updateChildren(userHashMap).addOnCompleteListener { task ->
                            if (task.isSuccessful) {

                                Log.d("mido",refUsers.get().result.toString())
                                findNavController().navigate(action)
                            }
                        }

//
                    } else {
                        Toast.makeText(
                            requireContext(),
                            "Error ${task.exception?.message.toString()}",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                }
        }

    }

}

build.gradle 依赖项

dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.20"
    implementation 'androidx.core:core-ktx:1.6.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    implementation platform('com.google.firebase:firebase-bom:28.2.0')
    implementation 'com.google.firebase:firebase-analytics-ktx'

    implementation 'com.google.firebase:firebase-core:19.0.0'
    implementation 'com.google.firebase:firebase-auth:21.0.1'
    implementation 'com.google.firebase:firebase-storage-ktx:20.0.0'
    implementation 'com.google.firebase:firebase-messaging:22.0.0'

    implementation platform('com.google.firebase:firebase-bom:28.2.0')

    // Declare the dependency for the Realtime Database library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-database-ktx'

    implementation 'de.hdodenhof:circleimageview:2.2.0'
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'com.rengwuxian.materialedittext:library:2.1.4'
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

    implementation 'com.intuit.ssp:ssp-android:1.0.6'
    implementation 'com.intuit.sdp:sdp-android:1.0.6'

    implementation 'com.android.support:multidex:1.0.3'

}
弗兰克·范·普费伦

我的第一个猜测是,您可能google-services.json在控制台中创建实时数据库之前已经下载了该文件,这意味着该文件不包含正确的配置字符串。

如果是这种情况,您需要:

  • 要么下载更新的配置文件并将其添加到您的 Android 应用程序中,
  • 或者您可以在此处的代码中指定数据库的 URL: FirebaseDatabase.getInstance("URL to database here").reference

如果这确实是问题的原因,我们正在努力更明确地解决这个配置问题(它目前隐藏在来自 SDK 的调试级日志消息中,默认情况下不会记录)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法在Android中更新Firebase实时数据库

聊天应用程序中的Firebase实时数据库结构

Firebase实时数据库无法正常运行,setValue

使用触发器向Firebase实时数据库添加元素

无法从Firebase实时数据库获取数据/将数据读取到UITableViewController

如何在Firebase实时数据库中向现有数据库添加数据?

首次安装android应用时,如何从Firebase实时数据库获取数据库

Firebase Android应用程序-不更新实时数据库

在Flutter应用程序中从Firebase实时数据库事件获取父节点

Firebase实时数据库写崩溃的Android应用程序

如何从Android应用程序向Firebase数据库添加数据

Android应用程序离线使用时,Firebase实时数据库崩溃

确定是否向 Firebase 实时数据库添加或删除数据

将实时数据库添加到我在 android studio 上的应用程序 - 无法解决:firebase-database-15.0.0

无法将数据从 Firebase 实时数据库检索到 Web 应用程序中

无法从 Firebase 实时数据库获取数据

无法从 Firebase 实时数据库中检索数据

Firebase 实时数据库:无法从 Firebase 数据库发送或检索数据

无法从 Firebase 实时数据库获取数据

将上传的数据获取到 android studio 上的 firebase 实时数据库时,应用程序崩溃

当我在我的应用程序中添加 Firebase 实时数据库时它开始崩溃

从 Firebase 实时数据库中删除数据并在 javascript 中更新应用程序

就我的聊天应用程序定价而言,Firebase Cloud Firestore 还是实时数据库?

Android Firebase 实时数据库博客应用

用于 2 个节点的聊天应用程序的 Firebase 实时数据库规则

无法从 Firebase 实时数据库读取数据

如何在桌面应用程序中保持 Firebase 实时数据库架构兼容?

firebase 实时数据库无法写入数据

无法捕获异常 Firebase 实时数据库