Plan
Premium
Country
US
Device
Pixel 6a
Operating System
windows10
My Question or Issue
here is the code in my android studio atm. Picasso can display images properly, but I can't get spotify to return the album art and display it on screen. Here is the main code. Please let me know if you have any insights:
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import com.spotify.sdk.android.auth.AuthorizationClient
import com.spotify.sdk.android.auth.AuthorizationRequest
import com.spotify.sdk.android.auth.AuthorizationResponse
import com.squareup.picasso.Picasso
import okhttp3.Call
import okhttp3.Callback
import okhttp3.OkHttpClient
import okhttp3.Request.Builder
import okhttp3.Response
import org.json.JSONObject
import java.io.IOException
class MainActivity : AppCompatActivity() {
private lateinit var imageView: ImageView
private val CLIENT_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxx"
private val REDIRECT_URI = "album-art-pulll://callback"
private val REQUEST_CODE = 1337
fun loadImageWithPicasso() {
Picasso.get()
.load("https://www.google.com/images/srpr/logo11w.png")
.into(imageView)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
imageView = findViewById(R.id.albumArtImageView)
//loadImageWithPicasso() // this works
authenticateWithSpotify() // this does not //////////////////////////////////////
}
private fun authenticateWithSpotify() {
val builder = AuthorizationRequest.Builder(
CLIENT_ID,
AuthorizationResponse.Type.TOKEN,
REDIRECT_URI
)
builder.setScopes(arrayOf("user-read-playback-state"))
val request = builder.build()
AuthorizationClient.openLoginActivity(this, REQUEST_CODE, request)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
super.onActivityResult(requestCode, resultCode, intent)
if (requestCode == REQUEST_CODE) {
val response = AuthorizationClient.getResponse(resultCode, intent)
if (response.type == AuthorizationResponse.Type.TOKEN) {
// Use the token to fetch the current playing track and display its album art
fetchCurrentPlayingTrack(response.accessToken)
}
}
}
private fun fetchCurrentPlayingTrack(accessToken: String) {
val request = Builder()
.url("https://api.spotify.com/v1/me/player/currently-playing")
.addHeader("Authorization", "Bearer $accessToken")
.build()
OkHttpClient().newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
// Handle the error
}
override fun onResponse(call: Call, response: Response) {
if (!response.isSuccessful) {
println("Response not successful: ${response.code}")
}
if (response.isSuccessful) {
val jsonResponse = JSONObject(response.body?.string())
// Extract and log album information
val albumInfo = jsonResponse.getJSONObject("item").getJSONObject("album")
Log.d("Spotify", "Album Info: $albumInfo")
val albumArtUrl = albumInfo.getJSONArray("images").getJSONObject(0).getString("url")
runOnUiThread {
// Use Picasso or Glide to load the image into your ImageView
Picasso.get()
.load(albumArtUrl)
.into(imageView, object : com.squareup.picasso.Callback {
override fun onSuccess() {
Log.d("Picasso", "Spotify image loaded successfully")
Log.d("Spotify", "API Response: ${response.body?.string()}")
}
override fun onError(e: Exception?) {
Log.e("Picasso", "Error loading Spotify image", e)
Log.d("Spotify", "API Response: ${response.body?.string()}")
}
})
}
}
}
})
}
}