I am trying to use Spotify API. To use the API i need to get a new auth token. So per their guides here, I wrote the code below to request for a new token:
this is my API interface
@FormUrlEncoded
@POST("api/token")
fun getToken(@Header("Authorization") auth:String,
@Header("Content-Type") content :String,
@Field(("grant_type")) grantType:String ): Call<Token>
this is my MainActivity:
val retrofit: Retrofit = Retrofit.Builder().baseUrl(TOKEN_URL)
.addConverterFactory(GsonConverterFactory.create()).build()
val service :TopTrackApi = retrofit.create(TopTrackApi::class.java)
val base64String = "Basic " + get64BaseString("6bcfc9a9fccd45c8b9bb9c980f03e653:96c65e1824084adfb1ae99ef97734621")
Log.i("64Base ", base64String)
val listCall : Call<Token> = service.getToken(base64String,"application/x-www-form-urlencode","client_credentials")
listCall.enqueue(object : Callback<Token>{
override fun onResponse(response: Response<Token>?, retrofit: Retrofit?) {
if (response?.body() != null) {
Log.i("Response!", response.body().access_token)
}
if(response?.body() == null){
Log.i("Response!", "null response body")
}
}
override fun onFailure(t: Throwable?) {
Log.e("Error", t!!.message.toString())
}
})
fun get64BaseString(value:String):String{
return Base64.encodeToString(value.toByteArray(),Base64.NO_WRAP)
}
This is the token class as per their json object:
data class Token(
val access_token: String,
val expires_in: Int,
val token_type: String
)
As a result I get this in Logcat:
I/Response: null response body
edit:When i am running the same values in a curl command it works(it returns the json object)
What am I doing incorrect? Thanks in advance.
I think your API interface should look like this:
@Headers("Content-Type: application/x-www-form-urlencoded")
@POST("api/token")
fun getToken(@Header("Authorization") auth:String,
@Field(("grant_type")) grantType:String ): Call<Token>