致命异常:OkHttp Dispatcher 尝试使用 Retrofit 从 API 检索数据时
FATAL EXCEPTION: OkHttp Dispatcher when trying to retrieve data from API using Retrofit
我已经了解了几个 Stack Overflow 解决方案,它们大多建议启用 Java 8,但它仍然不适合我。我的应用程序的最低 SDK 版本是 26。完整的错误代码:
E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
Process: com.example.myRestApp, PID: 28626
java.lang.BootstrapMethodError: Exception from call site #2 bootstrap method
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall.onFailure(DefaultCallAdapterFactory.java:87)
at retrofit2.OkHttpCall.callFailure(OkHttpCall.java:142)
at retrofit2.OkHttpCall.onFailure(OkHttpCall.java:137)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassCastException: Bootstrap method returned null
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall.onFailure(DefaultCallAdapterFactory.java:87)
at retrofit2.OkHttpCall.callFailure(OkHttpCall.java:142)
at retrofit2.OkHttpCall.onFailure(OkHttpCall.java:137)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
我已经在我的 build.gradle 文件中启用了 Java 8。我的Javaclass如下:
private void getPhotos() {
ApiInterfrace apiInterfrace = ServiceGenerator.createService(ApiInterfrace.class);
Call<List<Photo>> photosList = apiInterfrace.getPhotos();
photosList.enqueue(new Callback<List<Photo>>() {
@Override
public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) {
if (response.isSuccessful()) {
for (Photo photo : response.body()) {
photos.add(photo);
// Log.d("TAG", photo.getUrl().getFull());
}
photosAdatper.notifyDataSetChanged();
} else {
Log.d(TAG, "Fail");
}
showProgressbar(false);
}
@Override
public void onFailure(Call<List<Photo>> call, Throwable t) {
Log.d(TAG, "fail" + t.getMessage());
}
});
}
尝试将您的 gradle 版本从 8 更改为 1.8
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
我已经了解了几个 Stack Overflow 解决方案,它们大多建议启用 Java 8,但它仍然不适合我。我的应用程序的最低 SDK 版本是 26。完整的错误代码:
E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
Process: com.example.myRestApp, PID: 28626
java.lang.BootstrapMethodError: Exception from call site #2 bootstrap method
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall.onFailure(DefaultCallAdapterFactory.java:87)
at retrofit2.OkHttpCall.callFailure(OkHttpCall.java:142)
at retrofit2.OkHttpCall.onFailure(OkHttpCall.java:137)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassCastException: Bootstrap method returned null
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall.onFailure(DefaultCallAdapterFactory.java:87)
at retrofit2.OkHttpCall.callFailure(OkHttpCall.java:142)
at retrofit2.OkHttpCall.onFailure(OkHttpCall.java:137)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
我已经在我的 build.gradle 文件中启用了 Java 8。我的Javaclass如下:
private void getPhotos() {
ApiInterfrace apiInterfrace = ServiceGenerator.createService(ApiInterfrace.class);
Call<List<Photo>> photosList = apiInterfrace.getPhotos();
photosList.enqueue(new Callback<List<Photo>>() {
@Override
public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) {
if (response.isSuccessful()) {
for (Photo photo : response.body()) {
photos.add(photo);
// Log.d("TAG", photo.getUrl().getFull());
}
photosAdatper.notifyDataSetChanged();
} else {
Log.d(TAG, "Fail");
}
showProgressbar(false);
}
@Override
public void onFailure(Call<List<Photo>> call, Throwable t) {
Log.d(TAG, "fail" + t.getMessage());
}
});
}
尝试将您的 gradle 版本从 8 更改为 1.8
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}