Передать объект API через Intent в службу? - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь отправить объект, созданный из API Spotify (экземпляр SpotifyAppRemote) из моего класса MainActivity, в 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:

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

}

1 Ответ

0 голосов
/ 22 июня 2019

Я обошел это, объявив статическую переменную в моей службе и установив переменную в моей основной деятельности следующим образом:

BackgroundService.mSpotifyAppRemote = mSpotifyAppRemote;

Декларация в моем сервисе:

public static SpotifyAppRemote mSpotifyAppRemote = null;
...