Кодировка URL Android для двоеточия% 3A в команде GET - PullRequest
0 голосов
/ 27 апреля 2018

Я новичок в Java, и я пытаюсь сделать некоторые URL-кодирования для получения каталогов plex livetv с помощью команды GET. У меня проблема с двоеточием ":", если я использую двоеточие, я получаю эту ошибку, но если я использую кодировку URL "tv.plex.providers.epg.onconnect% 3A23", я получаю пустую библиотеку livetv.

Как правильно определить кодировку URL для строки ":"?

Неверно сформированный URL. База: http://192.168.1.50:32400/, Относительно: tv.plex.providers.epg.onconnect: 23 / секции

public interface PlexMediaContainerService {

    @GET("/")
    Call<MediaContainer> retrieveRoot();

    @GET("tv.plex.providers.epg.onconnect%3A23")
    Call<MediaContainer> retrieveLibrary();

    @GET("tv.plex.providers.epg.onconnect%3A23/sections")
    Call<MediaContainer> retrieveSections();

    @GET("tv.plex.providers.epg.onconnect%3A23/sections/{key}")
    Call<MediaContainer> retrieveSections(@Path("key") String key);

    @GET("tv.plex.providers.epg.onconnect%3A23/sections/{key}/{category}")
    Call<MediaContainer> retrieveSections(@Path("key") String key,
                                          @Path(value = "category", encoded = true) String category);

    @GET("tv.plex.providers.epg.onconnect%3A23/sections/{key}/{category}/{secondaryCategory}")
    Call<MediaContainer> retrieveSections(@Path("key") String key,
                                          @Path(value = "category", encoded = true)  String category,
                                          @Path(value = "secondaryCategory", encoded = true) String secondaryCategory);

    @GET("{urlPath}")
    Call<MediaContainer> retrieveItemByUrlPath(@Path(value = "urlPath", encoded = true) String key);


    @GET("tv.plex.providers.epg.onconnect%3A23/sections/{key}/search?type=1")
    Call<MediaContainer> movieSearch(@Path("key") String key,
                                    @Query("query") String query);

    @GET("tv.plex.providers.epg.onconnect%3A23/sections/{key}/search?type=2")
    Call<MediaContainer> tvShowsSearch(@Path("key") String key,
                              @Query("query") String query);

    @GET("tv.plex.providers.epg.onconnect%3A23/sections/{key}/search?type=4")
    Call<MediaContainer> episodeSearch(@Path("key") String key,
                                       @Query("query") String query);
}

1 Ответ

0 голосов
/ 28 апреля 2018

Проблема в том, что метод resolve в слое okhttp не знает, как объединить URL-адреса, которые начинаются с хоста. Вы можете добавить / в начало ваших путей, чтобы okhttp понял, что это путь, а не хост. Вам не нужно кодировать : самостоятельно. Например,

@GET("/tv.plex.providers.epg.onconnect:23")
Call<MediaContainer> retrieveLibrary();
...