【发布时间】:2021-05-10 22:10:59
【问题描述】:
Android、Kotlin。
我想使用RestApiService 文件进行请求,并进一步从strings.xml 文件发送字符串值,如下所示:
fun showPostsInRadius(modelSearchParams: ModelSearch, onResult: (Array<Post>?, Boolean, String?) -> Unit){
val retrofit = ServiceBuilder.buildService(RestApi::class.java)
retrofit.showPostsInRadius(Build.VERSION.SDK_INT, modelSearchParams).enqueue(
object : Callback<Array<ModelSearchResult>> {
override fun onFailure(call: Call<Array<ModelSearchResult>>, t: Throwable) {
onResult(null, false, Resources.getSystem().getString(R.string.connection_error_login))
println(t)
}
...
这行给出错误:
onResult(null, false, Resources.getSystem().getString(R.string.connection_error_login))
错误:
W/ResourceType: No known package when getting value for resource number 0x7f0f003c
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jaskierltd.goodtogether, PID: 15205
android.content.res.Resources$NotFoundException: String resource ID #0x7f0f003c
at android.content.res.Resources.getText(Resources.java:338)
at android.content.res.Resources.getString(Resources.java:432)
at com.jaskierltd.goodtogether.network.RestApiService$showPostsInRadius$1.onFailure(RestApiService.kt:145)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$2.run(ExecutorCallAdapterFactory.java:79)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
我应该配置与 strings.xml 文件相关的任何内容,还是应该使用其他方法调用它?现有主题都没有帮助。
【问题讨论】:
-
恕我直言,
onResult()应该获取资源 ID,然后在 UI 层将其转换为字符串(活动/片段/可组合)。 -
@CommonsWare 我们可以。但是 R.string.my_text.toString() - 这给出了一个 ID。但是,我们不能用它来显示没有上下文的字符串吗?疯狂的。系统知道 ID EXACTLY 在哪里,但我们不能使用它?怎么可能?
-
"但是,我们不能在没有上下文的情况下使用它来显示 STRING 吗?" - 正确的。 “怎么可能?” ——这个世界上不止一种语言。某些东西需要能够在运行时根据用户和设备映射给定字符串资源 ID 使用的字符串。在 Android 中,那个“东西”是
Context。如果您不喜欢这样,则不需要使用字符串资源。欢迎您以您喜欢的其他方式管理您的国际化字符串。