2016-04-11 8 views
0

Ich habe Probleme, Spotify-Playlists mit dem Beta Spotify SDK zu spielen. Ich bin etwas nach this tutorial bei der Wiedergabe mit der Spotify Player-Klasse. Anders als im Beispiel möchte ich jedoch Titel und Playlists wiedergeben, die vom Benutzer bereitgestellt wurden. Daher muss ich User-Tracks und Playlist-Daten sammeln, die ich mit Kaaes Android Web Wrapper gemacht habe. Nachdem ich die Daten gesammelt habe, die ich brauche, versuche ich, den Spotify-Player zu erstellen (der gut zu funktionieren scheint), und versuche dann von einer anderen Methode, einen Track oder eine Playlist abzuspielen. Interessanterweise kann ich einen Track nur wiedergeben, wenn ich ihn während des Build-Prozesses anrufe (wie im Tutorial), aber nicht von einer anderen Methode aus aufgerufen wird und ich kann keine Playlists spielen. Ich erhalte eine Fehlermeldung beim Versuch, Wiedergabelisten zu spielen, die lautet:Wiedergabe von Playlists und Titeln mit Spotify SDK für Android

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

Die Syntax für die Playlist, die ich auf das Spiel-Methode übergeben wie folgt aussieht:

spotify:playlist:4vDeSXEwfHMYOuQaTtwlUK 

, die ähnlich der verfolgen:

spotify:track:2TpxZ7JUBn3uw46aR7qd6V 

Das könnte natürlich falsch sein, aber es ist schwer online Beispiele dafür zu finden, wie man Wiedergabelisten auf dem Android SDK spielt. Kann mir bitte jemand zeigen, wie man Wiedergabelisten spielt und wie man Inhalte auf dem Spotify Player-Objekt abspielt, besonders außerhalb des Player-Builders? Ich werde einige relevante Abschnitte meiner Arbeit unten zur Verfügung stellen. FWIW, ich bin Umgang mit Authentifizierung von einer anderen Aktivität, und es hat mir zu viele Probleme nicht gegeben noch ...

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(); 
    } 
} 

Es gibt mehr Dinge in dieser Klasse gehen, aber nichts davon sollte jetzt stören. Ich freue mich auf Ihre Vorschläge.

Antwort

0

Sie erhalten diesen Fehler, weil der URI der von Ihnen verwendeten Spotify-Wiedergabeliste falsch ist. Das richtige Format ist:

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

Zum Beispiel:

spotify:user:spotify:playlist:4hOKQuZbraPDIfaGbM3lKI 

Das andere Problem durch die Tatsache verursacht wird, dass Sie das Feld zuweisen player nur dann, wenn der Rückruf onInitialized abgefeuert wird, wahrscheinlich, wenn Sie Rufen Sie test das Feld player ist immer noch null und Sie erhalten eine NullPointerException.

Ihre Methode buildPlayer wie folgt ändern:

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

Ja, ich, dass ein Teil aus bei anderen Anfragen bezüglich Wiedergabelisten suchen gestern Abend eigentlich dachte. Ich denke, das war die geringste meiner Sorgen, denn was mich mehr beschäftigt, ist die seltsame Tatsache, dass ich nichts außerhalb des Bereichs von onInitialized() von buildPlayer() spielen kann. – MasterChef

+0

Ich habe gerade meine Antwort mit aktualisiert eine mögliche Lösung für das Problem "onInitialized". Lassen Sie mich wissen, wenn Sie Ihr Problem lösen. –

+0

Danke! Ich werde das bald versuchen und (wenn ich mich erinnere) zurück zu dir. – MasterChef