在我的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之后?
发布于 2015-07-16 03:44:07
为我自己的问题提供一个解决方案:
@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是我得到解决方案的地方。
发布于 2020-03-12 10:48:39
你可以使用,
import com.neovisionaries.i18n.CountryCode;
try{
....
CountryCode country = CountryCode.DE;
GetArtistsTopTracksRequest request = SpotifyApi.getInstance().getArtistsTopTracks(artistId, country).build();
https://stackoverflow.com/questions/31432429
复制相似问题