【问题标题】:thelinmichael/spotify-web-api-java: How to get value from Async/Sync methodsthelinmichael/spotify-web-api-java:如何从异步/同步方法中获取价值
【发布时间】:2021-12-28 17:07:49
【问题描述】:

例如,我想获取 Spotify 曲目的 uri 并将其作为 String 值放入另一个方法中,但是我不知道该怎么做。我尝试使用 SharedPreferences 来获取值,但 getString 方法不起作用。我只是想知道是否有一种更简单的方法可以从 Async/Sync 方法的另一种方法中获取 track.getUri (或任何)。任何帮助将不胜感激。

到目前为止的代码:

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", )
    }

【问题讨论】:

    标签: spotify spotify-app


    【解决方案1】:

    要获取曲目,您需要一些信息才能开始。例如我有 spotify trackId 并且可以像这样(同步)找到轨道:

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

    现在 Track 对象(特别是 com.wrapper.spotify.model_objects.specification.Track)提供了大量信息。例如字段uri。

    所以你可以这样做:

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

    这有帮助吗?你的问题对我来说并不完全清楚。

    【讨论】:

    • 啊,我只是想知道,因为此 API 的模板是您必须将 API 方法放在 try/catch 语句中,而且每当我调用脚本中的方法时,IDE 都会告诉您我将它包围在尝试/捕获中。所以我想你可以把你描述的整个方法放在一个 try 中并捕获一个错误,它应该在这种情况下工作?
    猜你喜欢
    • 2018-05-21
    • 2021-04-18
    • 2020-03-10
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2019-03-08
    相关资源
    最近更新 更多