android - Retrofit2 可以在 Android 4.1.2 上使用吗?我的应用程序导致由 Retrofit2 引起的致命异常
问题描述
有没有办法在较旧的 Android 版本(对我来说至少 4.x)上使用 Retrofit2?
我的应用在 Android 6 上按预期运行,但在 Android 4.1.2 上出现致命异常:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.ExceptionInInitializerError
at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
at retrofit2.Retrofit$Builder.build(Retrofit.java:628)
at com.example.temperaturemonitor.RESTApi.getClient(RESTApi.java:15)
这是导致错误的代码(.build 是 RESTApi.java:15):
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.1.10:5001/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}
我可以看到错误的根本原因似乎是 okhttp3。
在 build.gradle 我有
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
我在https://developer.squareup.com/blog/okhttp-3-13-requires-android-5/发现“OkHttp 3.13 需要 Android 5+”。他们还维护 3.12 的 okhttp,它与 Android 4.x 兼容。我不清楚的是 Retrofit2 使用了什么版本的 okhttp(我没有将 okhttp 直接导入到我的项目中的实现行);我的假设是他们使用的是最新版本。
一旦完成,我希望能够将我的两部 Android 手机与应用程序一起使用(如果我决定发布到应用商店,那么包含早期版本会增加潜在用户)。我意识到这可能会阻止我使用一些更新的代码功能,但我可能可以忍受 - 到目前为止,我尝试过的任何事情都无法在两个版本上实现。
我的想法是,如果我可以让 Retrofit 使用 okhttp3.12 库,那么错误就不会发生。
解决方案
它使用3.14.9
. 你可以在文件okhttp
中看到。build.gradle
此外,您可以使用命令gradlew app:dependencies
. 您应该在该命令的输出中看到如下内容:
+--- com.squareup.retrofit2:retrofit:2.9.0
| \--- com.squareup.okhttp3:okhttp:3.14.9
| \--- com.squareup.okio:okio:1.17.2
如果您想强制它使用 的版本3.12.0
,okhttp
添加以下内容似乎可行:
implementation ('com.squareup.okhttp3:okhttp:3.12.0') {
force = true
}
推荐阅读
- mysql - Laravel ManytoMany:如何在用户注册时将产品附加到用户?
- gps - 将 Teltonika 设备连接到 Thingsboard
- reactjs - 当应用程序在前台时如何使用reactjs Web应用程序中的firebase推送通知处理click_action
- angular - 如何使用特殊关键字将字符串拆分为子字符串?
- python - Python:未检测到 Word 文档中的某些表格单元格
- c++ - 测量时间以在 C++ 中生成更好的随机数
- python - AttributeError:模块“tensorflow_core.compat.v1”没有属性“contrib”
- c# - 带有函数 C# 的列表
- ruby-on-rails - ActiveRecord::NotNullViolation - Mysql2 列不能为空
- angular - 电子应用程序抛出“_transform() 方法未实现”错误