OkHttpClient的NoClassDefFoundError

Ven*_*kat 11 android facebook classnotfoundexception

在gradle中添加facebook依赖项后,我收到此运行时错误:

     compile 'com.facebook.android:facebook-android-sdk:4.6.0'
Run Code Online (Sandbox Code Playgroud)

请注意我也在使用okhttp:

    compile 'com.squareup.okhttp:okhttp:2.5.0'
Run Code Online (Sandbox Code Playgroud)

和错误日志是:

 E/AndroidRuntime: FATAL EXCEPTION: Thread-109754
     Process: com.venkat.project, PID: 4453
            java.lang.NoClassDefFoundError: com.squareup.okhttp.internal.Util
            at com.squareup.okhttp.OkHttpClient.<clinit>(OkHttpClient.java:57)
            at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:127)
            at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:61)
            at java.lang.Thread.run(Thread.java:841)
02-23 18:11:02.729 4453-4573/com.venkat.project I/dalvikvm: Rejecting re-init on previously-failed class Lcom/squareup/okhttp/OkHttpClient; v=0x0
Run Code Online (Sandbox Code Playgroud)

注意:我在三星手机4.4上遇到此错误,但在模拟器上moto g 5.0并且运行正常.

Ben*_*val 15

最新版本的Piccasso使用较旧版本的Okhttp,您需要使用新的依赖项

compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.picasso:picasso:2.5.2'    
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
Run Code Online (Sandbox Code Playgroud)

例:

File httpCacheDirectory = new File(getCacheDir(), "picasso-cache");
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().cache(cache);
Picasso.Builder picassoBuilder = new Picasso.Builder(getApplicationContext());
picassoBuilder.downloader(new OkHttp3Downloader(clientBuilder.build()));
Picasso picasso = picassoBuilder.build();
try {
   Picasso.setSingletonInstance(picasso);
} catch (IllegalStateException ignored) {
  Log.e(LOG_TAG, "Picasso instance already used");
}
Run Code Online (Sandbox Code Playgroud)


Int*_*iya 5

你正在得到

       java.lang.NoClassDefFoundError: com.squareup.okhttp.internal.Util
        at com.squareup.okhttp.OkHttpClient.<clinit>(OkHttpClient.java:57)
        at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:127)
        at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:61)
Run Code Online (Sandbox Code Playgroud)

OkHttpClient 的 NoClassDefFoundError

public class NoClassDefFoundError extends LinkageError
Run Code Online (Sandbox Code Playgroud)

如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为普通方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且找不到该类的定义,则抛出此异常。

引用NoClassDefFoundError

你应该使用

compile 'com.facebook.android:facebook-android-sdk:4.10.0'
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用非零退出值 2 来结束此错误

然后

defaultConfig {
    ...
    minSdkVersion 14 //lower than 14 doesn't support multidex
    targetSdkVersion //Yours

    // Enabling multidex support.
    multiDexEnabled true
}

dependencies {
 implementation 'com.android.support:multidex:1.0.0'
}
Run Code Online (Sandbox Code Playgroud)
  1. 添加 multiDexEnabled true

  2. 称呼 implementation'com.android.support:multidex:1.0.2'

当网络出现问题时,OkHttp 会坚持不懈:它会默默地从常见的连接问题中恢复。如果您的服务有多个 IP 地址,那么如果第一次连接失败,OkHttp 将尝试备用地址。这对于 IPv4+IPv6 以及冗余数据中心托管的服务是必要的。

可以调用最新版本

implementation'com.squareup.okhttp3:okhttp:3.2.0'
Run Code Online (Sandbox Code Playgroud)

然后

Clean and Re-Build & Sync您的项目。希望这可以帮助 。