Runtime Execption java.lang.NoClassDefFoundError: retrofit2.Platform in Android 在Android中出现了运行时异常 java.lang.NoClassDefFoundError: retrofit2.Platform。

5 浏览
0 Comments

Runtime Execption java.lang.NoClassDefFoundError: retrofit2.Platform in Android 在Android中出现了运行时异常 java.lang.NoClassDefFoundError: retrofit2.Platform。

我正在使用Retrofit来处理来自移动端的服务器端数据,在实现Retrofit之后,我遇到了以下异常,请问是否有人了解这个问题,告诉我我做错了什么。

初始化Retrofit:

mRetrofit = new Retrofit.Builder()
                    .baseUrl(AppConstance.APP_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            Iservice = mRetrofit.create(IdeaService.class);

Gradle文件:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
    compile 'com.squareup.okio:okio:1.7.0'
}

堆栈跟踪:

   04-26 11:54:36.441 18355-18355/com.omt.example W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41da0c98)
04-26 11:54:36.441 18355-18355/com.omt.example W/dalvikvm: threadid=1: uncaught exception occurred
04-26 11:54:36.442 18355-18355/com.omt.example W/System.err: java.lang.NoClassDefFoundError: retrofit2.Platform
04-26 11:54:36.444 18355-18355/com.omt.example W/System.err:     at retrofit2.Retrofit$Builder.(Retrofit.java:402)
04-26 11:54:36.445 18355-18355/com.omt.example W/System.err:     at com.omt.example.utils.Idea.onCreate(Idea.java:79)
04-26 11:54:36.447 18355-18355/com.omt.example W/System.err:     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
04-26 11:54:36.448 18355-18355/com.omt.example W/System.err:     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4541)
04-26 11:54:36.449 18355-18355/com.omt.example W/System.err:     at android.app.ActivityThread.access$1500(ActivityThread.java:151)
04-26 11:54:36.450 18355-18355/com.omt.example W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1381)
04-26 11:54:36.451 18355-18355/com.omt.example W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:110)
04-26 11:54:36.451 18355-18355/com.omt.example W/System.err:     at android.os.Looper.loop(Looper.java:193)
04-26 11:54:36.452 18355-18355/com.omt.example W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5292)
04-26 11:54:36.453 18355-18355/com.omt.example W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
04-26 11:54:36.454 18355-18355/com.omt.example W/System.err:     at java.lang.reflect.Method.invoke(Method.java:515)
04-26 11:54:36.455 18355-18355/com.omt.example W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
04-26 11:54:36.456 18355-18355/com.omt.example W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
04-26 11:54:36.457 18355-18355/com.omt.example W/System.err:     at dalvik.system.NativeStart.main(Native Method)
04-26 11:54:36.457 18355-18355/com.omt.example W/dalvikvm: threadid=1: calling UncaughtExceptionHandler

0
0 Comments

问题的原因是在Android项目中使用了Retrofit库,但是没有正确引入okhttp3库。解决方法是将okhttp库的版本更改为okhttp3,并重新构建和同步gradle。另外,不需要单独引入okio库,因为Retrofit内部已经使用了该库。如果遇到添加renderscriptTargetApi和renderscriptSupportModeEnabled这两行代码后仍然出现相同的问题,可以寻求帮助。

0
0 Comments

原因:在Android中出现java.lang.NoClassDefFoundError: retrofit2.Platform的运行时异常是因为缺少retrofit2.Platform类。

解决方法:将retrofit2.Platform类添加到项目中。

整理成文章如下:

在Android开发中,有时候会遇到java.lang.NoClassDefFoundError: retrofit2.Platform的运行时异常。这个异常的出现是因为缺少retrofit2.Platform类。下面是一个解决方法的示例代码:

首先,在Service类中添加下面的代码:

//创建OkHttpClient客户端
Strategy strategy = new AnnotationStrategy();
//定义拦截器,添加身份验证头部
Interceptor interceptor = new Interceptor() {
    public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException {
        Request newRequest = chain.request().newBuilder().addHeader("User-Agent", "Retrofit-Sample-App").build();
        return chain.proceed(newRequest);
    }
};
Serializer serializer = new Persister(strategy);
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.interceptors().add(interceptor);
OkHttpClient client = builder.build();
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.networkInterceptors().add(httpLoggingInterceptor);
builder.build();
RxJavaCallAdapterFactory rxAdapter = RxJavaCallAdapterFactory.create();
Retrofit retrofit = new Retrofit.Builder()
        .addConverterFactory(SimpleXmlConverterFactory.create(serializer))
        .addCallAdapterFactory(rxAdapter)
        .baseUrl(YellowTalkConstant.BASE_URL)
        .client(client)
        .build();
try{
    this.mYellowTalkApi = retrofit.create(YellowTalkApi.class);
}catch (Exception ex) {
    Log.e("Exception", ex.toString());
}

以上代码中,我们使用了retrofit2.Platform类。如果在运行时出现java.lang.NoClassDefFoundError: retrofit2.Platform异常,说明项目中缺少retrofit2.Platform类。

为了解决这个问题,我们需要将retrofit2.Platform类添加到项目中。可以通过引入相关的依赖或者将相关的jar包添加到项目中来解决。完成后,重新编译和运行项目,异常就会得到解决。

通过以上方法,我们可以解决出现java.lang.NoClassDefFoundError: retrofit2.Platform的运行时异常,保证项目的正常运行。

0
0 Comments

问题原因:在Android应用中出现"Runtime Execption java.lang.NoClassDefFoundError: retrofit2.Platform"的错误,可能的原因是缺少了相关的依赖。

解决方法:

1. 在build.gradle文件中添加依赖:

compile 'com.android.support:multidex:1.0.0'

2. 在build.gradle文件中设置multiDexEnabled为true:

multiDexEnabled true

3. 在AndroidManifest.xml文件中的application标签内添加android:name属性,值为“android.support.multidex.MultiDexApplication”:



以上步骤解决了我遇到的问题。我的应用在Android 5.0及以上版本可以正常工作,但在Android 4.4上无法工作,通过以上步骤解决了这个问题。感谢。

0