Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当我尝试从Api中的上下文检索字符串时,是否会出现ResourceNotFoundException?_Android_Kotlin - Fatal编程技术网

Android 当我尝试从Api中的上下文检索字符串时,是否会出现ResourceNotFoundException?

Android 当我尝试从Api中的上下文检索字符串时,是否会出现ResourceNotFoundException?,android,kotlin,Android,Kotlin,所以我在我的API类上添加了一个从Firebase检索数据的上下文。如果检索失败,我将返回从资源中获取的字符串。我只是想知道,比如说碎片或活动突然被破坏了。我不会得到ResourcesNotFoundException吗 例如 我检索到数据>锁定我的屏幕>检索失败>(可能是ResourceNotFoundException) 如果这是真的,那么可以在AndroidViewModel中创建StringFactory,并使用applicationContext检索字符串吗 或 只需完全返回观察者将接

所以我在我的API类上添加了一个从Firebase检索数据的上下文。如果检索失败,我将返回从资源中获取的字符串。我只是想知道,比如说碎片或活动突然被破坏了。我不会得到ResourcesNotFoundException吗

例如

我检索到数据>锁定我的屏幕>检索失败>(可能是ResourceNotFoundException)

如果这是真的,那么可以在AndroidViewModel中创建StringFactory,并使用applicationContext检索字符串吗

只需完全返回观察者将接收到的常量var,然后允许观察者访问上下文以从资源中获取所需的字符串

下面是我的课程

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

}