Android应用调用Spotify API获取track时preview_url突然返回null
针对你遇到的Spotify API返回的preview_url和available_markets突然为null的问题,可以尝试以下几种排查和解决方法:
直接测试API端点,排除代码问题
用curl或Postman直接调用Spotify的track接口,使用和你代码中相同的access token和market参数:curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" "https://api.spotify.com/v1/tracks/SPOTIFY_TRACK_ID?market=US"如果返回结果里
preview_url依然是null,说明问题出在Spotify端(比如该曲目预览资源被移除、区域限制调整);如果返回正常,那就是你代码的参数传递或解析有问题。调整
market参数的传递方式
你代码中使用MutableMap<String, Any>传递查询参数,可能存在类型序列化的不确定性。建议直接在Retrofit接口中定义@Query参数:// 修改Spotify服务接口的getTrack方法 @GET("tracks/{id}") fun getTrack( @Path("id") trackId: String, @Query("market") market: String, callback: Callback<Track?> )调用时直接传入market字符串即可:
spotify.getTrack(spotifyIdTrack, market, object : Callback<Track?> { // 回调实现... })验证Track模型类的字段映射
确认你的Track数据类中,preview_url和available_markets的字段映射是否正确。比如使用Gson时,要确保字段名和API返回的JSON键一致,或添加@SerializedName注解:data class Track( // 其他字段... @SerializedName("preview_url") val previewUrl: String?, @SerializedName("available_markets") val availableMarkets: List<String>? )之前正常但突然失效,有可能是SDK更新后模型类的映射规则发生了变化。
检查access token的权限和有效性
确认你的access token是否有效,若为用户授权的token,需确保包含user-read-public这类基础权限。可以调用https://api.spotify.com/v1/me接口验证token状态,排查是否存在权限限制。补充错误日志排查
你代码中的failure回调无日志输出,建议添加错误信息打印:override fun failure(error: RetrofitError) { Log.e("SpotifyTrackError", "获取曲目失败: ${error.message}", error) }通过日志可以查看是否有HTTP错误码(如403、429)或其他异常,帮助快速定位问题。
内容的提问来源于stack exchange,提问作者Diego Perez

