gpt4 book ai didi

android - 向 Kotlin 改造调用发送参数

转载 作者:行者123 更新时间:2023-11-29 18:36:01 25 4
gpt4 key购买 nike

我是 Kotlin 的初学者。我需要将一个可变参数从我的 Activity 发送到 Retrofit 调用。

这是我对创建详细 Activity 的呼吁

override fun onCreate(savedInstanceState: Bundle?) {
//...
val id = intent.getStringExtra("id")

// Get the ViewMode
val mModel = ViewModelProviders.of(this).get(myObjectViewModel::class.java)

//Create the observer which updates the UI.
val myObjectByIdObserver = Observer<MyObject> { myObject->
//...
}

//Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
mModel.getObjectById.observe(this, myObjectByIdObserver)
}

这里我插入值硬编码,我需要从前一个 Activity 接收到的参数。

class MyObjectViewModel : ViewModel() {

//this is the data that we will fetch asynchronously
var myObject: MutableLiveData<MyObject>? = null

val getMyObjectById: LiveData<MyObject>
get() {
if (myObject == null) {
myObject = MutableLiveData()
loadMyObjectById()
}
return myObject as MutableLiveData<MyObject>
}

private fun loadMyObjectById() {
val retrofit = Retrofit.Builder()
.baseUrl(Api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()

val api = retrofit.create(Api::class.java)
val call = api.myObjectById(100)

call.enqueue(object : Callback<MyObject> {
override fun onResponse(call: Call<MyObject>, response: Response<MyObject>) {
myObject!!.value = response.body()
}
override fun onFailure(call: Call<MyObject>, t: Throwable) {
var tt = t
}
})
}

我的 API:

interface Api {
companion object {
const val BASE_URL = "https://.../"
}

@GET("myObjects/{id}")
fun myObjectById(@Path("id") id: Int?): Call<MyObject>
}

最佳答案

你可以通过 ``@Query``` 注释来做到这一点。

interface Api {
companion object {
const val BASE_URL = "https://.../"
}

@GET("myObjects/{id}")
fun myObjectById(@Path("id") id: Int?, @Query("a_param") aParam: String?): Call<MyObject>
}

已编辑。我完全误解了你的 Intent 。

你需要的好像是ViewModelProvider.NewInstanceFactory之类的

class MyObjectViewModel(val id: Int): ViewModel() {
class Factory(val id: Int) : ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return MyObjectViewModel(id) as T
}
}
}

然后

    val myViewModel = ViewModelProviders
.of(this, MyObjectViewModel.Factory(id))
.get(MyObjectViewModel::class.java)

关于android - 向 Kotlin 改造调用发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54338671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com