I am trying do request to Spotify API and at first I need authorization token for getting some info, so i am getting token and after this i try to request some albums with this token, but the second request starts before the first one and i am passing empty token and after get it. What can I do?
Here's my code:
viewModelScope.launch {
networkUiState = try {
val networkMusicRepository = NetworkMusicRepository()
getSpotifyToken(networkMusicRepository)
val listResult = networkMusicRepository.getAlbums(NetworkUiState.token)
NetworkUiState.Success
} catch (e: IOException) {
Log.d("RESPONSE", e.message.toString())
NetworkUiState.Error
} catch (e: HttpException) {
Log.d("RESPONSE", e.response()?.errorBody()?.string().toString())
NetworkUiState.Error
}
}
And getting token function:
private suspend fun getSpotifyToken(networkMusicRepository:
NetworkMusicRepository) {
val responseCall = networkMusicRepository.getToken()
responseCall.enqueue(object : Callback<TokenResponse> {
override fun onResponse(
call: Call<TokenResponse>,
response: Response<TokenResponse>
) {
val responseBody = response.body()
if (responseBody != null) {
val token = responseBody.accessToken
Log.i("RESPONSE", responseBody.accessToken)
NetworkUiState.token = token
} else {
Log.i("RESPONSE", "null response body")
}
}
override fun onFailure(call: Call<TokenResponse>, t: Throwable) {
Log.e("RESPONSE", t.message.toString())
}
})
}
Make sure you mark all asynchronous methods with suspend for example if getSpotifyToken(networkMusicRepository) is asynchronous
suspend fun getSpotifyToken(networkMusicRepository: MusicRepository)
What does your retrofit interface look like?