gcoder
gcoder

Reputation: 1

thelinmichael/spotify-web-api-java: How to get value from Async/Sync methods

For instance, I want to obtain the uri of a Spotify track and put it in another method as a String value, however I'm lost on how I'd go about doing that. I tried experimenting with SharedPreferences to get the value but getString method wasn't working. I was just wondering if there's a simpler way to getting say track.getUri (or any) in another method from the Async/Sync method. Any assistance would be greatly appreciated.

The code so far:

private static final String accessToken = "...";
    private static final String id = "01iyCAUm8EvOFqVWYJ3dVX";
    public static SharedPreferences.Editor editor;






    private static final SpotifyApi spotifyApi = new SpotifyApi.Builder()
            .setAccessToken(accessToken)
            .build();
    private static final GetTrackRequest getTrackRequest = spotifyApi.getTrack(id)
//          .market(CountryCode.SE)
            .build();

    public static void getTrack_Sync() {
        try {
            final Track track = getTrackRequest.execute();

            System.out.println("Name: " + track.getName());
        } catch (IOException | SpotifyWebApiException | ParseException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }



    @RequiresApi(api = Build.VERSION_CODES.N)
    public void getTrack_Async() {
        try {
            final CompletableFuture<Track> trackFuture = getTrackRequest.executeAsync();

            // Thread free to do other tasks...


            // Example Only. Never block in production code.
            final Track track = trackFuture.join();

            String uri = track.getUri();
            editor = getSharedPreferences("uri", 0).edit();
            editor.putString("uri", uri);
            editor.commit();
            editor.apply();




            System.out.println("Name: " + track.getUri());

        } catch (CompletionException e) {
            System.out.println("Error: " + e.getCause().getMessage());
        } catch (CancellationException e) {
            System.out.println("Async operation cancelled.");
        }
    }

    public void go() {
        getTrack_Async();
      //  String value = editor.getString("uri", )
    }

Upvotes: 0

Views: 149

Answers (1)

judos
judos

Reputation: 444

To get the track you need some kind of information to start with. e.g. I have the spotify trackId and can find the track (synchronously) like this:

public Track getTrack(String trackId) {
  return spotifyApi.getTrack(trackId).build().execute();
}

Now the Track object (specifically com.wrapper.spotify.model_objects.specification.Track) provides a lot of information. e.g. the field uri.

So you could do just:

public void run(String trackId) {
  Track track = spotifyApi.getTrack(trackId).build().execute();
  String uri = track.uri;
  // now call something else with the uri?
}

Does that help? Your question was not entirely clear for me.

Upvotes: 0

Related Questions