如何在 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 的国家代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 d3.scale.ordinal() 中指定域?

如何在 aar 库中指定依赖项?

如何使用cognito在android中指定自定义错误消息

如何在ColorStateList中指定无颜色?

Android中指定关闭某个Activity

在 Mercurial 中指定编辑器