Retrofit2 可以在 Android 4.1.2 上使用吗?我的应用程序导致由 Retrofit2 引起的致命异常
Can Retrofit2 be use on Android 4.1.2? My app results in fatal exception caused by Retrofit2
有没有办法在旧 Android 版本上使用 Retrofit2(对我来说至少是 4.x)?
我的应用程序在 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+”。他们还维护 okhttp 的 3.12,它与 Android 4.x 兼容。我不清楚 Retrofit2 使用的是什么版本的 okhttp(我没有将 okhttp 直接导入我的项目的实施行);我的假设是他们使用的是最新版本。
我希望能够在我的 Android 手机上使用该应用程序(如果我决定发布到应用程序商店,那么包括早期版本会增加潜在用户)。我意识到这可能会阻止我使用一些较新的代码功能,但我可能可以接受 - 到目前为止,我尝试过的所有内容在这两个版本上都是不可能的。
我的想法是,如果我可以让 Retrofit 使用 okhttp3.12 库,那么错误就不会发生。
它使用 okhttp
的版本 3.14.9
。您可以在 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
如果你想强制它使用 okhttp
的版本 3.12.0
,添加以下内容似乎可行:
implementation ('com.squareup.okhttp3:okhttp:3.12.0') {
force = true
}
有没有办法在旧 Android 版本上使用 Retrofit2(对我来说至少是 4.x)?
我的应用程序在 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+”。他们还维护 okhttp 的 3.12,它与 Android 4.x 兼容。我不清楚 Retrofit2 使用的是什么版本的 okhttp(我没有将 okhttp 直接导入我的项目的实施行);我的假设是他们使用的是最新版本。
我希望能够在我的 Android 手机上使用该应用程序(如果我决定发布到应用程序商店,那么包括早期版本会增加潜在用户)。我意识到这可能会阻止我使用一些较新的代码功能,但我可能可以接受 - 到目前为止,我尝试过的所有内容在这两个版本上都是不可能的。
我的想法是,如果我可以让 Retrofit 使用 okhttp3.12 库,那么错误就不会发生。
它使用 okhttp
的版本 3.14.9
。您可以在 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
如果你想强制它使用 okhttp
的版本 3.12.0
,添加以下内容似乎可行:
implementation ('com.squareup.okhttp3:okhttp:3.12.0') {
force = true
}