我正在使用Retrofit2进行API解析。
使用
retrofit1.9.0
时,post 和 get 方法都可以正常工作。但是使用retrofit 2.1.0
,在get方法中,出现错误:
java.lang.IllegalArgumentException:baseUrl 必须以 / 结尾
我检查了我的代码,没有问题,它适用于 post 方法。
Retrofit retrofit= new Retrofit.Builder()
.baseUrl("sample.com/ecomtest/index.php?route=api/")
.addConverterFactory(GsonConverterFactory.create())
.build();
'?'不能在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);
您作为
API_BASE_URL
传递的 URL 应以“/”结尾,因此请将其添加到 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 "/"
它会起作用的。
在改造中,您不能使用“某些?”之类的端点在基本 URL 中。 像
一样分割您的 URLString 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);
完成了
假设您的网址是“https://yourapi.com/abc?def&key=123”
将您的网址分成两部分。
String baseURL ="https://yourapi.com/"; //make sure you have '/' at the end
String key = "123";
然后在 GET 注释中添加剩余部分,如下所示
@GET("abc?def&key="+key)
有同样的情况,这里的答案几乎涵盖/解释了解决方案。 但不完全是这样。
我尝试像这样存储
BASE_URL
:sample.com/api
我的端点是例如:/users
添加
/
的解决方案没有帮助:sample.com/api/
问题在于
/
中有多个 BASE_URL
,我猜改造会因为斜杠不仅仅作为结束标记而变得疯狂。
唯一有效的解决方案:
sample.com/
其终点将是:api/users
因此,在 BASE_URL 中仅保留一个 /
是我的解决方案,并将其保留在基本 url 字符串的末尾
一定要像这样设置 [encoded = false] :
suspend fun getAnyThing(@Query("api_key", encoded = false) apikey: String)
就我而言,输入“/”不起作用。因为我的 baseUrl 末尾已经有“/”。我的改造版本是2.11.0,我将此版本更改为2.9.0,所以我的问题解决了。
我使用
URL = "URL/"
解决了这个错误。必须有 / 作为最后一个字符才能使其工作。