GET命令中冒号%3A的Android URL编码

时间:2018-04-26 23:02:46

标签: java android retrofit plex

我是java的新手,我正在尝试使用GET命令来检索plex livetv目录。我遇到的问题是使用冒号“:”如果我使用冒号,我会收到此错误,但如果我使用URL编码“tv.plex.providers.epg.onconnect%3A23”,我会得到一个空白的livetv库。

为“:”字符串定义URL编码的正确方法是什么?

格式错误的网址。基数:http://192.168.1.50:32400/,相对:tv.plex.providers.epg.onconnect:23 / sections

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 :(得分:0)

问题是okhttp层中的resolve方法不知道如何合并到同时以主机开头的url。您可以在路径的开头添加/,以使okhttp了解它是路径而不是主机。您不需要自己编码:。例如,

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