使用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;
最后,确认依赖和初始化是否正确
- 检查app级build.gradle里有没有添加Firestore依赖:
dependencies { implementation 'com.google.firebase:firebase-firestore-ktx:24.10.0' // 可以用最新版本 implementation 'com.google.firebase:firebase-core:21.1.1' }
- 项目根目录的build.gradle要确保添加了Google服务插件:
plugins { id 'com.google.gms.google-services' version '4.4.0' apply false }
按上面的步骤调整后,应该就能把EditText的内容存到Firestore里啦!
内容的提问来源于stack exchange,提问作者Shikhar Singh
相关产品推荐
相关产品推荐

