Retrofit初始化报Illegal URL异常,Activity实例化失败求助
解决Retrofit初始化时的
Illegal URL异常 嘿,我来帮你搞定这个Retrofit的报错问题!
先看问题本身
你这段Retrofit初始化代码里,baseUrl传了个空字符串:
Retrofit.Builder builder = new Retrofit.Builder() .baseUrl("") // 这里是空的,这就是问题根源! .addConverterFactory(GsonConverterFactory.create()); Retrofit retrofit=builder.build(); UserClient userClient=retrofit.create(UserClient.class);
运行后就抛出了这个异常:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.saiid.authetification/com.example.saiid.authetification.MainActivity}: java.lang.IllegalArgumentException: Illegal URL:
为啥会报错?
Retrofit对baseUrl的要求很明确:必须是一个合法的HTTP/HTTPS格式的完整基础地址,空字符串完全不符合这个规则。另外就算填了地址,还有两个细节要注意:
- 必须以
http://或者https://开头,不能只写域名 - 地址末尾最好带上斜杠
/,不然后续拼接接口路径时容易出问题
怎么解决?
- 替换成真实有效的Base URL
把空字符串换成你的API服务的实际地址,比如你的后端API部署在https://api.your-service.com,那代码就改成:Retrofit.Builder builder = new Retrofit.Builder() .baseUrl("https://api.your-service.com/") // 注意末尾的斜杠 .addConverterFactory(GsonConverterFactory.create()); - 检查URL格式是否合规
绝对不能省略协议部分(http:///https://),比如只写api.your-service.com也是会报错的;末尾加斜杠是个好习惯:比如你的接口注解是@GET("users/list"),那最终拼接出来的URL就是https://api.your-service.com/users/list,不会出现拼接错误 - 验证URL是否能正常访问
不确定地址对不对的话,先在浏览器里打开这个Base URL,确认能返回正常的HTTP响应(哪怕是404也没关系,只要不是无法访问就行)
额外小建议
如果你的项目有开发、测试、生产多个环境,可以把Base URL放在strings.xml或者专门的配置类里,这样切换环境的时候不用改代码,更方便。
内容的提问来源于stack exchange,提问作者Ouertani Saiid
相关产品推荐
相关产品推荐

