我一直在關注檔案以將位置用于天氣應用程式。我已按照指定的說明進行操作,MainActivity但希望使用此位置資訊進行 API 呼叫。
我在一個涉及 RetroFit2 和 Moshi 的 CodeLab 之后構建了我的應用程式。我已經宣告了一個network包,并且正在其中包含的一個ApiService類中作業。如何MainActivity從內部訪問定義的位置物件ApiService?
com.example.app.MainActivity:
private lateinit var fusedLocationClient: FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?) {
// ...
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}
com.example.app.network.ApiService:
// how to access fusedLocationClient here?
private const val BASE_URL =
"https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41¤t_weather=true"
private val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
private val retrofit = Retrofit.Builder()
.addConverterFactory(MoshiConverterFactory.create(moshi))
.baseUrl(BASE_URL)
.build()
uj5u.com熱心網友回復:
有一些方法可以做到這一點。最簡單的方法是在 MainActivityViewModel 上呼叫此 API,因此您可以將所需的所有資訊作為引數發送。它會是這樣的:
private lateinit var fusedLocationClient: FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?) {
// ...
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
viewModel.makeCall(fusedLocationCient)
}
在 viewModel 上
ViewModel: ViewModel() {
fun makeCall(fusedLocationClient: LocationClient) {
// I don't know how you created this ApiService,
// but you should access it here
ApiService().makeCall(fusedLocationClient)
}
}
第二個(不要認為你會需要這個)是有一個帶有這個位置資料的單例,并在你想要的類上得到它。你可以使用 Koin 來注入這些類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/463010.html
