2016-04-11 3 views
0

У меня возникли проблемы с воспроизведением плейлистов Spotify, чтобы играть с бета-версией Spotify SDK. Я, несколько, следую this tutorial при воспроизведении с помощью класса Spotify Player. Однако, в отличие от примера, я хочу воспроизводить треки и плейлисты, предоставленные пользователем, поэтому я должен собирать пользовательские треки и данные плейлиста, которые я сделал с Kaaes Android Web Wrapper. Собрав необходимые данные, я пытаюсь создать проигрыватель Spotify (который, кажется, строит отлично), затем из отдельного метода попытается воспроизвести дорожку или плейлист. Интересно, что я могу получить трек, чтобы воспроизвести его только в том случае, если я вызываю его во время процесса сборки (например, в учебнике), но не вызван из другого метода, и я не могу воспроизвести плейлисты вообще. Я получаю сообщение об ошибке при попытке воспроизведения списков воспроизведения, считываемые:Воспроизведение плейлистов и дорожек с помощью Spotify SDK для Android

com.spotify.sdk.android.player.NativeSpotifyException: Failed SpPlayUri with error code 5 (An unexpected argument value was passed to a function) 

Синтаксиса для воспроизведения, который я прохожу к способу воспроизведения выглядит следующим образом:

spotify:playlist:4vDeSXEwfHMYOuQaTtwlUK 

, который похож на трек:

spotify:track:2TpxZ7JUBn3uw46aR7qd6V 

Это может быть, конечно, неверно, но трудно найти примеры онлайн о том, как играть в плейлисты в Android SDK. Так может ли кто-нибудь, пожалуйста, показать мне, как играть в плейлисты и как воспроизводить контент на объекте Spotify Player, особенно вдали от создателя проигрывателя? Ниже я расскажу о некоторых соответствующих разделах моей работы. FWIW, я обработка аутентификации от другой деятельности, и он не дал мне слишком много проблем еще ...

private PlayerState       state; 
private Player        player; 
... 
public void buildPlayer(){ 
    //start a Spotify player 
    Config playerConfig = new Config(this, token, client_id); 
    Spotify.getPlayer(playerConfig, this, new Player.InitializationObserver() { 
     @Override 
     public void onInitialized(Player p) { 
      player = p; 
      player.addPlayerNotificationCallback(SpotifyPlayer.this); 
      player.setPlaybackBitrate(PlaybackBitrate.BITRATE_NORMAL); 
      player.getPlayerState(new PlayerStateCallback() { 
       @Override 
       public void onPlayerState(PlayerState playerState) { 
        state = playerState; 
       } 
      }); 
     } 
     @Override 
     public void onError(Throwable throwable) { 
      Log.e(ID, "Could not initialize player: " + throwable.getMessage()); 
     } 
    }); 
} 

... 
public void test(){ 
    try { 
     player.play("spotify:track:2TpxZ7JUBn3uw46aR7qd6V"); 
     //oddly enough, the track fails to play here, but not if I have this line in the builder 
    }catch (Exception e){ 
     System.out.println("player failed to play"); 
     e.printStackTrace(); 
    } 
} 

Там есть больше вещей происходит в этом классе, но ничего из этого не следует вмешиваться прямо сейчас. Я с нетерпением жду ваших предложений.

ответ

0

Вы получили эту ошибку, поскольку URI списка воспроизведения Spotify, который вы используете, неверен. Правильный формат:

spotify:user:{user_id}:playlist:{playlist_id} 

Например:

spotify:user:spotify:playlist:4hOKQuZbraPDIfaGbM3lKI 

Другая проблема вызвана тем, что вы назначаете поле player только тогда, когда обратный вызов onInitialized обжигают, вероятно, когда вы звоните test поле player по-прежнему равно нулю, и вы получаете NullPointerException.

Измените метод buildPlayer так:

public void buildPlayer(){ 
    //start a Spotify player 
    Config playerConfig = new Config(this, token, client_id); 
    player = Spotify.getPlayer(playerConfig, this, new Player.InitializationObserver() { 
     @Override 
     public void onInitialized(Player p) { 
      player.addPlayerNotificationCallback(SpotifyPlayer.this); 
      player.setPlaybackBitrate(PlaybackBitrate.BITRATE_NORMAL); 
      player.getPlayerState(new PlayerStateCallback() { 
       @Override 
       public void onPlayerState(PlayerState playerState) { 
        state = playerState; 
       } 
      }); 
     } 
     @Override 
     public void onError(Throwable throwable) { 
      Log.e(ID, "Could not initialize player: " + throwable.getMessage()); 
     } 
    }); 
} 
+0

Да, я на самом деле понял, что часть прошлой ночью, глядя на другие вопросы, касающиеся списков воспроизведения. Я думаю, что это было наименьшее из моих забот, хотя, поскольку меня больше беспокоит странный факт, что я не могу играть ничего вне области 'onInitialized()' часть 'buildPlayer()' – MasterChef

+0

Я просто обновил свой ответ с помощью возможное решение проблемы onInitialized. Дайте мне знать, разрешите ли вы свою проблему. –

+0

Спасибо! Я попробую это скоро и (если я помню) вернусь к вам. – MasterChef

Смежные вопросы