You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kotlin向Firestore数据库上传数据失败:EditText内容无法存储

解决EditText内容无法存储到Firestore的问题

刚接触Firestore和Kotlin确实容易踩这些小坑,我来帮你排查下可能的问题,一步步解决!

首先,你的代码缺了核心的存储逻辑

你现在只是拿到了EditText的实例,但既没获取输入的文本内容,也没有执行把数据提交到Firestore的操作。给你补全完整的流程:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val mFirestore: FirebaseFirestore = FirebaseFirestore.getInstance()
        val nameEditText = findViewById<EditText>(R.id.nameText)
        val submitBtn = findViewById<Button>(R.id.submitBtn) // 假设你有一个提交按钮

        submitBtn.setOnClickListener {
            // 获取输入的文本,记得trim()去掉前后空格,避免空内容
            val userName = nameEditText.text.toString().trim()
            
            if (userName.isNotEmpty()) {
                // 构造要存储的数据(用HashMap或者自定义数据类都可以)
                val userData = hashMapOf(
                    "name" to userName
                )
                
                // 往Firestore的"users"集合添加文档
                mFirestore.collection("users")
                    .add(userData)
                    .addOnSuccessListener {
                        Toast.makeText(this, "数据存进去啦!", Toast.LENGTH_SHORT).show()
                    }
                    .addOnFailureListener { e ->
                        Toast.makeText(this, "存储失败:${e.message}", Toast.LENGTH_SHORT).show()
                    }
            } else {
                Toast.makeText(this, "请输入姓名哦", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

其次,检查Firestore的安全规则

如果你的Firestore安全规则默认是「仅允许认证用户读写」,但你没做用户登录的话,数据肯定存不进去。可以先临时修改规则测试(上线前一定要改回安全规则!):

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true; // 临时开放所有读写权限,仅测试用
    }
  }
}

测试通过后,记得改回安全的规则,比如要求用户登录才能操作:

allow read, write: if request.auth != null;

最后,确认依赖和初始化是否正确

  1. 检查app级build.gradle里有没有添加Firestore依赖:
dependencies {
    implementation 'com.google.firebase:firebase-firestore-ktx:24.10.0' // 可以用最新版本
    implementation 'com.google.firebase:firebase-core:21.1.1'
}
  1. 项目根目录的build.gradle要确保添加了Google服务插件:
plugins {
    id 'com.google.gms.google-services' version '4.4.0' apply false
}

按上面的步骤调整后,应该就能把EditText的内容存到Firestore里啦!

内容的提问来源于stack exchange,提问作者Shikhar Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:09:31