Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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 如何从资源中设置改型URL字符串_Android_Kotlin_Retrofit2 - Fatal编程技术网

Android 如何从资源中设置改型URL字符串

Android 如何从资源中设置改型URL字符串,android,kotlin,retrofit2,Android,Kotlin,Retrofit2,我已经重构了用Kotlin编写的代码的某些部分,并且倾向于将url放在strings.xml中,但是当我想在改造的注释部分中指向strings.xml文件中的字符串时,我得到了以下错误 注释参数必须是编译时常量 这是我的密码: interface SampleApiService { @GET(Resources.getSystem().getString(R.string.sample_url)) fun getSamples(){ } } 谁能告诉我怎么了 在下面的

我已经重构了用Kotlin编写的代码的某些部分,并且倾向于将url放在strings.xml中,但是当我想在改造的注释部分中指向strings.xml文件中的字符串时,我得到了以下错误

注释参数必须是编译时常量

这是我的密码:

interface SampleApiService {
    @GET(Resources.getSystem().getString(R.string.sample_url))
    fun getSamples(){
    }
}
谁能告诉我怎么了


在下面的帖子中找到了答案。

如文档所述,它在构建时编译您的应用程序资源。注释处理在编译时进行。因此,您无法将资源字符串传递给注释

Android SDK工具将应用程序的资源编译到 构建时的应用程序二进制文件


根据所提供的示例,创建静态字符串变量并将其传递到注释中-也可以使用静态URL。为了不使用任何运行时值并能够在运行时更改它,需要对其进行类似的注释:

@GET("{path}")
fun getSamples(@Path("path") path: String) {}
然后可以在运行时从字符串资源中加载任何
字符串路径。当需要更改基本URL时,可能需要重新配置客户端。这是因为注释处理器正在使用这个
接口
定义从中生成抽象层——已经在编译时,而不是在运行时。。。当从字面上理解投诉时,它必须如下所示:

@GET(Constants.SOME_PATH)
fun getSamples() {}
但仅仅对字符串进行硬编码并没有什么进步,因为它以后无法更改。

问题解决了, Tnx至

我不得不使用另一个改装注释标记

新:@Url参数注释允许传递端点的完整Url

结果如下:

interface SampleApiService {
    @GET
    fun getSamples(
        @Url url: String =
            Resources.getSystem().getString(R.string.sample_url)
    )
            : Deferred<ArrayList<Sample>>

}
接口采样服务{
@得到
有趣的样品(
@Url:String=
Resources.getSystem().getString(R.string.sample\u url)
)
:延期
}

解决方案的可能副本:@Miha_x64 tnx给你,这解决了我的问题。