Runtime Execption java.lang.NoClassDefFoundError: retrofit2.Platform in Android

元气小坏坏 提交于 2019-12-01 06:05:10

Try change the okhttp to okhttp3

compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'

As retrofit2 internally using okhttp3.

Try build and sync gradle.

I had the same problem. Possible solution (fixed my problem):

1) Add gradle dependency: compile 'com.android.support:multidex:1.0.0' (file build.gradle)

2) Set multiDexEnabled true (file build.gradle)

3) Add android:name="android.support.multidex.MultiDexApplication" (file AndroidManifest.xml)

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:name="android.support.multidex.MultiDexApplication">
 </application>

Add these to your Service class

//create OkHttpClient client

    Strategy strategy = new AnnotationStrategy();

    // Define the interceptor, add authentication headers
    Interceptor interceptor = new Interceptor() {
        @Override
        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());
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!