java.lang.IllegalArgumentException:baseUrl必须以/在使用改进2.1.0 for GET方法时结束

时间:2016-07-15 11:52:16

标签: java android

我正在使用Retrofit2进行API解析。

使用retrofit1.9.0时,post和get方法都能正常工作。但是在get方法中使用retrofit 2.1.0会出现错误:

  

java.lang.IllegalArgumentException:baseUrl必须以/

结尾

我已经检查了我的代码,没有问题,它适用于post方法。

    Retrofit retrofit= new Retrofit.Builder() 
                        .baseUrl("sample.com/ecomtest/index.php?route=api/") 
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();

7 个答案:

答案 0 :(得分:13)

''不能在baseUrl中,你应该将它移动到API接口。像这样。

完整网址:https://free-api.heweather.com/v5/now? city=yourcity&key=yourkey

所以,baseUrl = "https://free-api.heweather.com/v5/"

和API接口

@GET("now?")
Observable<HeWeather5> getNowWeather(@Query("city") String city,@Query("key") String key);

答案 1 :(得分:7)

您作为API_BASE_URL传递的网址应以“/”结尾,因此请在网址末尾添加。

Retrofit.Builder builder =
         new Retrofit.Builder()
                     .baseUrl(API_BASE_URL)
                     .addConverterFactory(GsonConverterFactory.create());

其中

String API_BASE_URL = "http://www.domain.com/"; //string end with "/"

它会起作用。

答案 2 :(得分:3)

在改造中你不能使用像“some?”这样的端点。在基本URL中。 将您的网址拆分为

String url="http://sample.com/ecomtest/index.php?route=api/";
String baseUrl=url.split(".com/")[0]+".com/";
String queryUrl=url.split(".com")[1];

然后使用

Retrofit.Builder builder =
         new Retrofit.Builder()
                     .baseUrl(baseUrl)
                     .addConverterFactory(GsonConverterFactory.create());

并将结束点作为请求方法的路径传递给

@GET("{endpoint}")
    Call<Response> getData(@Path("endpoint") String endpoint);

并完成了

答案 3 :(得分:1)

假设您的网址是&#34; https://yourapi.com/abc?def&key=123&#34;

将您的网址拆分为两部分。

String baseURL ="https://yourapi.com/"; //make sure you have '/' at the end

String key = "123";

然后在GET注释中添加rest,就像这个@GET("abc?def&key="+key)

一样

答案 4 :(得分:0)

在相同的情况下,这里的答案几乎涵盖/解释了解决方案。 但是不完全是。

我试图这样存储BASE_URLsample.com/api 我的端点将用于e.x:/users

添加/的解决方案没有帮助:sample.com/api/

问题出在/中有多个BASE_URL,我猜想改版会因为斜杠不仅作为结束标记而发疯。

唯一有效的解决方案:sample.com/ 终点为:api/users 因此,对我来说,在BASE_URL中仅保留一个/是解决方案,并将其保留在基本url字符串的末尾

答案 5 :(得分:0)

确保设置 [encoded = false] 像这样:

suspend fun getAnyThing(@Query("api_key", encoded = false) apikey: String)

答案 6 :(得分:-3)

我使用URL = "URL/"解决了这个错误。必须有/作为最后一个角色才能使它发挥作用。