android - 如何在 Android Kotlin 中用 Firestore 引用替换字符串数组?
问题描述
我正在尝试使用 firestore 连接构建 autoTextView。
我已经构建了一个可以工作的 autoTextView 应用程序,其中数据直接保存在 strings.xml 文件中。我也已经将 Firestore 连接到我的应用程序。
我现在要做的是将我的 strings.xml 文件中的这些数据替换为与 firebase 的连接。所以用户在 autoTextView 中输入了一些东西,自动完成选项应该来自 firebase 而不是来自 strings.xml 文件。
有谁知道我如何尝试实现它?
字符串.xml:
<resources>
<string name="app_name">servus</string>
<string name="hint">Please type language...</string>
<string name="submit">Submit</string>
<string name="submitted_lang">Submitted language:</string>
<string-array name="Languages">
<item>Java</item>
<item>Kotlin</item>
<item>Swift</item>
<item>Python</item>
<item>Scala</item>
<item>Perl</item>
<item>Javascript</item>
<item>Jquery</item>
</string-array>
</resources>
MainActivity.kt 文件:
package com.example.servus
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import android.view.View
import android.widget.ArrayAdapter
import android.widget.AutoCompleteTextView
import android.widget.Button
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val autotextView
= findViewById<AutoCompleteTextView>(R.id.autoTextView)
// Get the array of languages
val languages
= resources.getStringArray(R.array.Languages)
// Create adapter and add in AutoCompleteTextView
val adapter
= ArrayAdapter(this,
android.R.layout.simple_list_item_1, languages)
autotextView.setAdapter(adapter)
val button
= findViewById<Button>(R.id.btn); if (button != null)
{
button ?.setOnClickListener(View.OnClickListener {
val enteredText = getString(R.string.submitted_lang) + " " + autotextView.getText()
Toast.makeText(this@MainActivity, enteredText, Toast.LENGTH_SHORT).show()
})
}
}
}
活动主.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<AutoCompleteTextView
android:id="@+id/autoTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:hint="@string/hint"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.249" />
</androidx.constraintlayout.widget.ConstraintLayout>
解决方案
当您获得语言时,您需要从 firestore 数据库中获取它们,而不是从strings.xml
. 例如,如果您处于离线状态,您可以使用这些strings.xml
值作为备用。
// This code goes in your DatabaseManger or whatever class in your android app your handling firestore
// Figure out the appropriate document path based on the DB schema you designed
val docRef = db.collection("collection_name").document("document_name")
docRef.get()
.addOnSuccessListener { document ->
if (document != null) {
Log.d(TAG, "DocumentSnapshot data: ${document.data}")
// Here's your languages, save them somewhere so you can use them
} else {
Log.d(TAG, "No such document")
}
}
.addOnFailureListener { exception ->
Log.d(TAG, "get failed with ", exception)
// Probably offline, or auth problem. Maybe use strings.xml backup.
}
这是一个异步操作,可能需要几秒钟。您应该考虑在用户等待的同时向他们展示什么。以后的时间应该使用本地 Firestore 缓存来避免等待。阅读有关 Firestore Android SDK 的更多信息以了解如何使用它。
推荐阅读
- sharepoint - 将 WSP 从 SP2013 迁移到 SP2019 - 使用电源外壳,但由于“16”不是有效版本而出现错误
- angular - 重新加载路线未显示组件
- excel - 检查日期是否过去以及单元格是否为空白
- java - 如何在 Java 中写入 strings.xml 文件字符串数组样式?
- postgresql - max_connections 的不同值
- ios - 使用gmail打开时如何使深层链接颤动?
- swift - SwiftUI 中令人抓狂的错误似乎没有意义。编译器有错误吗?
- javascript - 日期格式的名称是什么,如何仅在 html 中显示日期?2020 年 8 月 24 日星期一 00:00:00 GMT+0800(新加坡标准时间)
- javascript - 禁用选项时,选择不适用于 IE 11 - jQuery
- elasticsearch - 用于插入和更新的 Elastic Logstash 脚本