2017-04-08 142 views
0

我正在開發一個實現Spotify API的Android應用程序,以允許用戶聽音樂。我已經配置了Spotify爲Android設備創建的播放器,但它的功能有限,所以我不得不通過Spotify的Web API來執行更多高級功能。Spotify Android - 製作授權Web請求

我試圖獲取用戶自己的播放列表的列表時遇到了一個錯誤。我使用的是發出請求:

URL url = new URL("https://api.spotify.com/v1/me/playlists"); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

不採用這個命令經歷像它爲我做了其他網站的API請求時,它拋出的錯誤:

java.io.FileNotFoundException: https://api.spotify.com/v1/me/playlists 
                       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:242) 
                       at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 
                       at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25) 
                       at com.tmacstudios.spotifyvoice.WebWrapper$override.searchUserPlaylist(WebWrapper.java:257) 
                       at com.tmacstudios.spotifyvoice.WebWrapper$override.access$dispatch(WebWrapper.java) 
                       at com.tmacstudios.spotifyvoice.WebWrapper.searchUserPlaylist(WebWrapper.java:0) 
                       at com.tmacstudios.spotifyvoice.MainActivity$6.run(MainActivity.java:382) 
                       at java.lang.Thread.run(Thread.java:818) 

我米不完全確定爲什麼我得到這個錯誤,但我認爲這可能與沒有必要的授權來提出這個請求。任何人都可以請幫我解決這個問題嗎?

回答

1

在學習了一些文檔後,我找到了解決問題的方法。因爲我沒有使用適當的授權,所以我實際上遇到了錯誤。

您可以使用此代碼獲取授權令牌OnActivityResult:

AuthenticationResponse response = AuthenticationClient.getResponse(resultCode, intent); 
      if (response.getType() == AuthenticationResponse.Type.TOKEN) { 

       authToken = response.getAccessToken(); 
       Log.e("MainActivity","Auth Token: "+authToken.toString()); 
... 

然後使URL請求時,只是通過在授權令牌作爲標題。

URL url = new URL("https://api.spotify.com/v1/me/playlists"); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.setRequestProperty("Authorization", "Bearer " + authToken); 

     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
... 

另請注意,當您最初形成授權請求時,您必須具有您正在使用的作爲範圍啓用的權限。