2016-04-15 4 views
4

私のプロジェクトでは、ネットワーク要求ライブラリとしてOkHttp(バージョン2.5.0)を使用しました。しかし数日前、私はあなたのアプリのネットワーク要求ライブラリの一部としてRetrofit2を試しました。あなたが知っているように、新しいRetrofit2ライブラリはOkHttp(バージョン3.2.0)に依存しています。私はOkHttp(バージョン3.2.0)は、いくつかを持っていることを推測し、スタックトレースから

04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err: java.lang.NoClassDefFoundError: okhttp3.OkHttpClient$Builder 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at com.comingx.athit.client.ServiceGenerator.<clinit>(ServiceGenerator.java:22) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at com.comingx.athit.ui.fragments.CircleNativeFragment.onViewCreated(CircleNativeFragment.java:105) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.os.Handler.handleCallback(Handler.java:808) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:103) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.os.Looper.loop(Looper.java:193) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5348) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at dalvik.system.NativeStart.main(Native Method) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err: java.lang.NoClassDefFoundError: okhttp3.OkHttpClient$Builder 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at com.comingx.athit.client.ServiceGenerator.<clinit>(ServiceGenerator.java:22) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at com.comingx.athit.ui.fragments.CircleNativeFragment.onViewCreated(CircleNativeFragment.java:105) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
04-15 21:28:51.185 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at android.os.Handler.handleCallback(Handler.java:808) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:103) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at android.os.Looper.loop(Looper.java:193) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5348) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
04-15 21:28:51.186 17238-17238/com.comingx.athit W/System.err:  at dalvik.system.NativeStart.main(Native Method) 

:アンドロイド5.0の下のバージョンは、常にクラッシュ(拡大版がうまく機能して何のクラッシュを引き起こさない)、クラッシュスタック情報は、以下のように表示さの原因となりますOkHttp(バージョン2.5.0)と衝突します。以下は、私の外部ライブラリ設定を示します:

compile 'com.squareup.okhttp:okhttp:2.5.0' 
compile 'com.squareup.okhttp3:okhttp:3.2.0' 
compile 'com.google.code.gson:gson:2.6.2' 
compile 'com.squareup.retrofit2:retrofit:2.0.1' 
compile 'com.squareup.retrofit2:converter-gson:2.0.1' 

問題を知っている人なら誰でも私に恩恵を与えることができます!まことにありがとうございます!

アップデート1:ここでは は私ServiceGenerator.javaです:

package com.comingx.athit.client; 

import com.comingx.athit.model.Constants; 
import com.comingx.athit.model.modelmanager.ModelManagerSingleton; 

import java.io.IOException; 

import okhttp3.Interceptor; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.Response; 
import retrofit2.Retrofit; 
import retrofit2.converter.gson.GsonConverterFactory; 

public class ServiceGenerator { 
    private static OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(
      new Interceptor() { 
       @Override 
       public Response intercept(Chain chain) throws IOException { 
        Request request = chain.request() 
          .newBuilder().addHeader("Cookie", ModelManagerSingleton.getNative_cookie()).build(); 
        return chain.proceed(request); 
       } 
      } 
    ).build(); 
    private static Retrofit.Builder builder = 
      new Retrofit.Builder() 
        .baseUrl(Constants.V3.API_PREFIX) 
        .addConverterFactory(GsonConverterFactory.create()); 

    public static <T> T createService(Class<T> serviceClass) { 
     Retrofit retrofit = builder.client(httpClient).build(); 
     return retrofit.create(serviceClass); 
    } 
} 
+0

com.comingx.athit.client.ServiceGenerator' 'にコードを貼り付けてもらえますか? – srain

+0

OkHttp 3は、別のパッケージ名を使用したと判断して、以前のOkHttpとのコロケーションを可能にするように設計されています。したがって、(1)あなたのランタイムクラスパスにOkHttp 3を持っていない、または(2)クラスパスのOkHttp 3が不完全である、または(3) 'com.comingx.athit .client.ServiceGenerator'は、それが何であれ、別の、おそらく以前のバージョンを望んでいます。 –

+0

私は2行の 'compile 'com.squareup.okhttpを削除することができると思います:okhttp:2.5.0' コンパイル 'com.squareup.okhttp3:okhttp:3.2.0'' – BNK

答えて

9

はい、最終的に私は問題を発見し、それを解決します。私は同様の問題hereを見たし、多分64K方法が問題を引き起こす可能性があることを見つけたので、私はオーバー64K方法とビルのアプリを表示するofficial site に来ました。 は、今すぐあなたのbuild.gradleファイルにmultidexライブラリをコンパイルする必要があります。

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

そして、あなたのdefaultConfig設定へのを忘れないでください:

android { 
    defaultConfig { 
    multiDexEnabled true 
    } 
} 

をそして最後に、あなたははまで伸びBaseApplicationを書くことができますアプリケーションは、attachBaseContext(コンテキストベース)メソッドを以下のように書く:

@Override 
    protected void attachBaseContext(Context base) { 
     super.attachBaseContext(base); 
     MultiDex.install(this); 
    } 

は、あなたのAndroidManifest.xmlファイルにこれを追加することを忘れないでください:

<application 
     android:name=".BaseApplication" 
     android:allowBackup="true"> 
</application>