Android 当我尝试从Api中的上下文检索字符串时,是否会出现ResourceNotFoundException?
所以我在我的API类上添加了一个从Firebase检索数据的上下文。如果检索失败,我将返回从资源中获取的字符串。我只是想知道,比如说碎片或活动突然被破坏了。我不会得到ResourcesNotFoundException吗 例如 我检索到数据>锁定我的屏幕>检索失败>(可能是ResourceNotFoundException) 如果这是真的,那么可以在AndroidViewModel中创建StringFactory,并使用applicationContext检索字符串吗 或 只需完全返回观察者将接收到的常量var,然后允许观察者访问上下文以从资源中获取所需的字符串 下面是我的课程Android 当我尝试从Api中的上下文检索字符串时,是否会出现ResourceNotFoundException?,android,kotlin,Android,Kotlin,所以我在我的API类上添加了一个从Firebase检索数据的上下文。如果检索失败,我将返回从资源中获取的字符串。我只是想知道,比如说碎片或活动突然被破坏了。我不会得到ResourcesNotFoundException吗 例如 我检索到数据>锁定我的屏幕>检索失败>(可能是ResourceNotFoundException) 如果这是真的,那么可以在AndroidViewModel中创建StringFactory,并使用applicationContext检索字符串吗 或 只需完全返回观察者将接
interface BaseApi<T> {
val process: MutableLiveData<Response<T>>
}
接口BaseApi{
val进程:MutableLiveData
}
class AccountApi(val上下文:上下文,val存储:FirebaseFirestore):BaseApi{
重写val进程:MutableLiveData=MutableLiveData()
fun getAccountDocument(电子邮件:字符串):LiveData{
val集合=存储集合(“帐户”)
收集文件(电子邮件)
.get()
.addOnSuccessListener{task->
process.value=Response(true).data(task.toObject(AccountDocument::class.java))
}
.addOnFailureListener{
process.value=Response(false).message(context.getString(R.string.account\u不存在))
}
返回过程
}
}
数据类响应(
val isSuccessful:布尔值=false
) {
private var_message:String=“”
私有变量_数据:T?=null
有趣的消息(消息:字符串):响应{
_消息=消息
还这个
}
fun getMessage()=\u消息
乐趣数据(数据:T?):响应{
_数据=数据
还这个
}
fun getData()=\u数据
}
当您将字符串添加到与默认的strings.xml
文件不同的语言环境中,而忘记将其添加到默认的strings.xml
文件时,这是一个常见问题。
因此,当您处于默认区域设置时,应用程序将无法看到该值,因为它不在默认的
字符串中。xml
您将无法获得ResourceNotFoundException
您无法使用已销毁的上下文。在这种情况下,可以使用应用程序
类全局提供上下文
。
class AccountApi(val context: Context, val store: FirebaseFirestore) : BaseApi<AccountDocument> {
override val process: MutableLiveData<Response<AccountDocument>> = MutableLiveData()
fun getAccountDocument(email: String): LiveData<Response<AccountDocument>> {
val collection = store.collection("accounts")
collection.document(email)
.get()
.addOnSuccessListener { task ->
process.value = Response<AccountDocument>(true).data(task.toObject(AccountDocument::class.java))
}
.addOnFailureListener {
process.value = Response<AccountDocument>(false).message(context.getString(R.string.account_does_not_exist))
}
return process
}
}
data class Response<T>(
val isSuccessful: Boolean = false
) {
private var _message: String = ""
private var _data: T? = null
fun message(message: String): Response<T> {
_message = message
return this
}
fun getMessage() = _message
fun data(data: T?): Response<T> {
_data = data
return this
}
fun getData() = _data
}