kotlin 传递2个EditText值以进行改进,将它们用作Base_Url和自定义标头的一部分

m4pnthwp  于 2022-12-04  发布在  Kotlin
关注(0)|答案(1)|浏览(158)

我是一个初学者在使用Android工作室和Kotlin,我从来没有学过任何编程语言,所以我的问题可能有一个简单的方法来解决。但搜索stackoverflow,其他编程网站,youtube等没有给予我的答案,我需要(也许有一个,我没有理解它的正确方式).
所以我想做的解释很简单:我有几个片段(使用导航组件),其中显示了来自某些get请求的不同数据。有一个登录片段,其中有两个edittext和一个保存按钮。在第一个edittext中,用户必须插入一个url,它应该是get请求的基本url。那么second-edittext中的文本应该是自定义标题的一部分。当单击保存-按钮,第一个GET请求应该开始,通过第一个GET请求,用户获得一个令牌,这也将被实现为下一个请求的报头。最后,edit-texts的2个值也应该被保存在另一个片段的列表视图中(用户可以添加他想要的任意多个不同的edittext 1和edittext 2的组合)。然后,他也可以从列表视图片段开始请求。
所以我的主要问题是如何将edittext的值传递给get请求。一种可能性是在片段中启动请求,使用拦截器添加edittext 2-header和url作为基url。我还没有尝试过,所以我也不知道这样做是否可行。我读过很多文章,这不是做这些事情的方法。特别是当我想使用Mvvm模式时。因此,问题是,如何将edittext传递给视图模型,传递给存储库,以进行更新。
我读到了有关动态头的改型与@头与一个关键字和相关的值,什么看起来像我所需要的,但我如何指定的值,使值始终是插入的文本(在edittext 2中)?对于url来说,这是类似的,我确信有一种相对简单的方法来处理用于请求的base_url,但是我的问题是不变的。。如何通过edittext来改造。
使用共享偏好、数据绑定或类似的东西会有帮助吗?
我希望有人能给予我一个提示,告诉我如何管理所有这些事情。也许我错过了一些明显的东西。
非常感谢:-)

bmvo0sr5

bmvo0sr51#

听起来您似乎想将EditText中的值用作Retrofit请求的动态值。实现此目的的一种方法是使用ViewModel中的LiveData对象存储EditText中的值。然后,在存储库中,您可以使用这些LiveData值构建Retrofit请求。
下面是一个示例,说明如何做到这一点:
在Fragment中,用户在EditTexts中输入值,您可以在ViewModel中的LiveData对象上使用observe()方法,以便在用户更改值时更新这些值。例如:

viewModel.baseUrlLiveData.observe(this, Observer { baseUrl ->
    // Update the Retrofit request with the new base URL
})
viewModel.headerValueLiveData.observe(this, Observer { headerValue ->
    // Update the Retrofit request with the new header value
})

在ViewModel中,您可以公开保存EditText值的LiveData对象。例如:

class MyViewModel: ViewModel() {
    val baseUrlLiveData = MutableLiveData<String>()
    val headerValueLiveData = MutableLiveData<String>()

    // Other code...
}

在存储库中,您可以使用ViewModel中的LiveData值构建Retrofit请求。例如:

class MyRepository {
    fun getData(baseUrl: String, headerValue: String) {
        val retrofit = Retrofit.Builder()
            .baseUrl(baseUrl)
            .build()
        val service = retrofit.create(MyService::class.java)
        val call = service.getData(headerValue)
        // Make the Retrofit call...
    }
}

在服务接口中,可以使用@Header注解指定应该动态传递标头值。例如:

interface MyService {
    @GET("/data")
    fun getData(@Header("Custom-Header") headerValue: String): Call<Data>
}

相关问题