通过 Intent to Service 传递 API 对象?

Pass API object via Intent to Service?

我正在尝试将从 Spotify API(SpotifyAppRemote 实例)创建的对象从我的 MainActivity class 发送到 BackgroundService(作为 IntentService 实现)。 由于我无法使用 parcelable 发送我的对象,因为我无法控制 API 我试图使用 GSON 通过 putExtra 方法从我的意图中发送它,如下所示:

intent.putExtra("spotifyRemote", gson.toJson(mSpotifyAppRemote, SpotifyAppRemote.class));

但是,在运行时出现错误:

java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: com.spotify.protocol.types.ImageUri. Forgot to register a type adapter?

是否有其他方法可以将此对象发送到我的服务?查找此错误消息并没有真正帮助。

这是我的 MainActivity class 中的代码:

@Override
public void onConnected(SpotifyAppRemote spotifyAppRemote) {
mSpotifyAppRemote = spotifyAppRemote;
getCurrentTrack();

// Now you can start interacting with App Remote
button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(final View v) {
        infoText.setText("Successfully started!");
        counter = 1;
        numSongs = Integer.parseInt(mEdit.getText().toString());
        PlayerApi playerApi = mSpotifyAppRemote.getPlayerApi();
        playerApi.seekTo(0);
        playerApi.resume();
        Intent intent = new Intent(MainActivity.this, BackgroundService.class);
        intent.putExtra("counter", counter);
        intent.putExtra("numSongs", numSongs);
        intent.putExtra("firstTrack", gson.toJson(curTrack, Track.class));
        intent.putExtra("spotifyRemote", gson.toJson(mSpotifyAppRemote, SpotifyAppRemote.class));

        startService(intent);
    }
});

}

我通过在我的服务中声明一个静态变量并在我的 MainActivity 中设置该变量来解决这个问题,如下所示:

BackgroundService.mSpotifyAppRemote = mSpotifyAppRemote;

我服务中的声明:

public static SpotifyAppRemote mSpotifyAppRemote = null;