改造2 – dynamicurl

使用Retrofit 2,您可以在服务方法的注释中设置完整的URL,例如:

public interface APIService { @GET("http://api.mysite.com/user/list") Call<Users> getUsers(); } 

但是,在我的应用程序中,我的webservices的URL在编译时不知道,应用程序检索到他们在一个下载的文件,所以我想知道如何使用完整的dynamicURL的Retrofit 2。

我试图设置一个完整的path,如:

 public interface APIService { @GET("{fullUrl}") Call<Users> getUsers(@Path("fullUrl") fullUrl); } new Retrofit.Builder() .baseUrl("http://api.mysite.com/") .build() .create(APIService.class) .getUsers("http://api.mysite.com/user/list"); // this url should be dynamic .execute(); 

但在这里,Retrofit没有看到path实际上是一个完整的URL,并试图下载http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist

任何暗示,我可以如何使用Retrofit这样的dynamicurl?

谢谢

  • 为什么当使用改进从服务器同步到本地数据库的一堆数据时,Android Circle进度对话框冻结
  • Android M + Retrofit + JSON:无法使字段构造函数可访问
  • Android OkHttp,刷新过期令牌
  • Retrofit 2示例教程,但GsonConverterFactory显示错误“无法parsing符号”
  • 从响应中获取标题(Retrofit / OkHttp客户端)
  • 在Retrofit Android中手动重试请求的好方法
  • javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:未find证书path的信任锚
  • 无法在Android Retrofit库中为我的课程创build转换器
  • 我觉得你用错了。 以下是更新日志的摘录:

    新增function:@Url参数注释允许为端点传递完整的URL。

    所以你的界面应该是这样的:

     public interface APIService { @GET Call<Users> getUsers(@Url String url); } 

    我只想replaceurl的一部分,并且用这个解决scheme,我不必传递整个url,只是dynamic部分:

     public interface APIService { @GET("users/{user_id}/playlists") Call<List<Playlist> getUserPlaylists(@Path(value = "user_id", encoded = true) String userId); } 

    至于Retrofit 2.0.0-beta2,如果你有一个服务响应这个URL的JSON: http:// myhost / mypath

    以下不起作用:

     public interface ClientService { @GET("") Call<List<Client>> getClientList(); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://myhost/mypath") .addConverterFactory(GsonConverterFactory.create()) .build(); ClientService service = retrofit.create(ClientService.class); Response<List<Client>> response = service.getClientList().execute(); 

    但是这没关系:

     public interface ClientService { @GET Call<List<Client>> getClientList(@Url String anEmptyString); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://myhost/mypath") .addConverterFactory(GsonConverterFactory.create()) .build(); ClientService service = retrofit.create(ClientService.class); Response<List<Client>> response = service.getClientList("").execute(); 

    您可以使用@Path注释中的编码标志:

     public interface APIService { @GET("{fullUrl}") Call<Users> getUsers(@Path(value = "fullUrl", encoded = true) String fullUrl); } 
    • 这将防止用%2Freplace/
    • 它不会救你?%3Freplace,所以你仍然不能传入dynamic查询string。