具有RetroFit的致命异常OkHttp调度程序

时间:2018-06-09 01:05:18

标签: java android retrofit okhttp

我正在使用RetroFit拨打TheMovieDatabase API,并试图获取一个热门电影列表,以填入ArrayList。但是,当我通过RetroFit进行调用时,我收到与OkHTTP相关的错误。我正在将OkHTTP与RetroFit结合使用:

RecylerView

以下是我在RetroFit中的相关代码:

06-08 19:57:26.281 19232-19254/popularmovies.troychuinard.com.popularmovies E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
    Process: popularmovies.troychuinard.com.popularmovies, PID: 19232
    java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/internal/Platform;
        at okhttp3.logging.HttpLoggingInterceptor$Logger$1.log(HttpLoggingInterceptor.java:112)
        at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:160)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:147)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "okhttp3.internal.Platform" on path: DexPathList[[zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/base.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_dependencies_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_0_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_1_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_2_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_3_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_4_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_5_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_6_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_7_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_8_apk.apk", zip file "/data/app/popularmovies.troychuinard.com.popularmovies-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/popularmovies.troychuinard.com.popularmovies-2/lib/arm, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at okhttp3.logging.HttpLoggingInterceptor$Logger$1.log(HttpLoggingInterceptor.java:112) 
        at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:160) 
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) 
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) 
        at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200) 
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:147) 
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
        at java.lang.Thread.run(Thread.java:761) 

API InterFace:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(getApplicationContext(), String.valueOf(i), Toast.LENGTH_LONG).show();
            String selection = String.valueOf(i);
            switch (i){
                case 0:
                    query = "popular";
                    mBaseURL = "https://api.themoviedb.org/3/movie/popular/";
                    break;
                case 1:
                    query = "top_rated";
                    mBaseURL = "https://api.themoviedb.org/3/movie/top_rated/";
                    break;
                default:
                    query = "popular";
                    mBaseURL = "https://api.themoviedb.org/3/movie/popular/";
                    break;
            }
            mMovieURLS.clear();
            mMovieResultsAdapter.notifyDataSetChanged();
            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient
                    .Builder()
                    .addInterceptor(interceptor)
                    .build();

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(mBaseURL)
                    .client(client)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

            ApiInterface apiInterface = retrofit.create(ApiInterface.class);
            Call<TheMovieDatabase> call = apiInterface.getImages();
            call.enqueue(new Callback<TheMovieDatabase>() {
                @Override
                public void onResponse(Call<TheMovieDatabase> call, Response<TheMovieDatabase> response) {
                    String movieResponse = String.valueOf(response.isSuccessful());
                    Log.v("SUCESS", movieResponse);
                }

                @Override
                public void onFailure(Call<TheMovieDatabase> call, Throwable t) {

                }
            });
        }

Gradle Dependencies:

    public interface ApiInterface{
    @GET("?api_key=xxxxxxxxx&language=en-US")
    Call<TheMovieDatabase> getImages();
}

1 个答案:

答案 0 :(得分:0)

我知道这个问题已经 2 年了,但我解决了我的问题。所以这是您可以尝试的替代答案。

我的错误是在升级我的依赖项版本后开始的(Android Studio 在查看项目结构后建议它)。由于问题涉及 Retrofit 和 OkHttp,当我的应用程序运行时,我恢复到我使用的旧版本。所以,我建议恢复到旧版本:

 implementation  'com.squareup.retrofit2:retrofit:*older version here*'
 implementation  'com.squareup.retrofit2:converter-gson:*older version here*'
 implementation  'com.squareup.retrofit2:converter-moshi:*older version here*'
 implementation  'oauth.signpost:oauth-signpost:*older version here*'
 implementation  'se.akerfeldt:okhttp-signpost:*older version here*'
 implementation  'com.squareup.okhttp3:okhttp:*older version here*'
 implementation  'oauth.signpost:signpost-core:*older version here*'

这是我恢复到旧版本的依赖项。我建议您在应用运行时将任何与 Retrofit 或 OkHttp 相关的依赖项更改回旧版本。

如果您在确定可用的旧版本时遇到任何问题,我建议从 Project Structure > Dependencies 选项卡 > 查看依赖项版本应用标签。从那里您可以找到您正在寻找的依赖项,并更改版本。

祝你好运