我正在使用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();
答案 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_URL
:sample.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/"
解决了这个错误。必须有/作为最后一个角色才能使它发挥作用。