如何在 Android 中指定 Spotify Web API 的国家代码?
Posted
技术标签:
【中文标题】如何在 Android 中指定 Spotify Web API 的国家代码?【英文标题】:How to specify the country code for the Spotify Web API in Android? 【发布时间】:2015-10-04 14:43:16 【问题描述】:在我的 android 应用程序中,我试图获得一位艺术家的前十首曲目。我正在为 Spotify Web API 使用wrapper。要获得艺术家的前十首曲目,您必须提供getArtistTopTrack(id)
方法和艺术家的id
。
这是我的代码,旨在做到这一点:
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_top_ten);
Intent intent = getIntent();
String artistID = "";
artistID = intent.getExtras().getString("ID");
FetchTopTenTracksTask topTenTracksTask = new FetchTopTenTracksTask();
topTenTracksTask.execute(artistID);
private class FetchTopTenTracksTask extends AsyncTask<String, Void, Tracks>
@Override
protected Tracks doInBackground(String... params)
SpotifyApi api = new SpotifyApi();
SpotifyService spotify = api.getService();
return spotify.getArtistTopTrack(params[0]);
我得到的错误是
E/AndroidRuntime(2882): FATAL EXCEPTION: AsyncTask #2
E/AndroidRuntime(2882): java.lang.RuntimeException: An error occured while executing doInBackground()
它是由doInBackground
引起的。我的想法是错误的请求是由这行代码引起的,因为我需要为搜索指定一个国家代码(API 需要这个)但我不知道如何。
return spotify.getArtistTopTrack(params[0]);
获取艺术家热门曲目的正确端点是
GET https://api.spotify.com/v1/artists/the artists id/top-tracks?country=ISO 3166-1 alpha 2 country code
但是当我检查 LogCat 以查看它正在使用的端点时,它变成了一个不正确的端点
D/Retrofit(2882): <--- HTTP 400 https://api.spotify.com/v1/artists/the artist id%3Fcountry%3DIE/top-tracks (59ms)
如您所见,国家/地区代码“IE”附加到艺术家id
,如下所示:"%3Fcountry%3DIE"
。这就是导致错误的原因,因为由于语法错误,服务器无法理解请求。
谁能告诉我如何将 "?country=country code"
附加到端点,而不是在艺术家 ID 之后?
【问题讨论】:
【参考方案1】:为我自己的问题提供解决方案:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_top_ten);
listView = (ListView) findViewById(R.id.listView);
Intent intent = getIntent();
String artistID = "";
artistID = intent.getExtras().getString("ID");
FetchTopTenTracksTask topTenTracksTask = new FetchTopTenTracksTask();
topTenTracksTask.execute(artistID);
private class FetchTopTenTracksTask extends AsyncTask<String, Void, Tracks>
@Override
protected Tracks doInBackground(String... params)
try
String artistID = params[0];
Map<String, Object> options = new Hashtable<String, Object>();
options.put("country", "IE"); //Can be any country code here
SpotifyApi api = new SpotifyApi();
SpotifyService spotify = api.getService();
return spotify.getArtistTopTrack(artistID, options);
catch (RetrofitError retrofitError)
Log.d("Retrofit Error: ", retrofitError.toString());
return null;
Here 是我得到解决方案的地方。
【讨论】:
【参考方案2】:你可以使用,
import com.neovisionaries.i18n.CountryCode;
try
....
CountryCode country = CountryCode.DE;
GetArtistsTopTracksRequest request = SpotifyApi.getInstance().getArtistsTopTracks(artistId, country).build();
【讨论】:
以上是关于如何在 Android 中指定 Spotify Web API 的国家代码?的主要内容,如果未能解决你的问题,请参考以下文章