java.lang.NoClassDefFoundError 与 HttpResponseCache 和 DiskLruCache

Posted

技术标签:

【中文标题】java.lang.NoClassDefFoundError 与 HttpResponseCache 和 DiskLruCache【英文标题】:java.lang.NoClassDefFoundError with HttpResponseCache and DiskLruCache 【发布时间】:2014-02-15 05:59:30 【问题描述】:

我正在尝试在一个新的 android 项目中测试这个缓存库。 当我运行项目时,我得到了这个 Logcat:

01-24 03:45:31.109: E/AndroidRuntime(1983): FATAL EXCEPTION: main
01-24 03:45:31.109: E/AndroidRuntime(1983): Process: com.test_cache, PID: 1983
01-24 03:45:31.109: E/AndroidRuntime(1983): java.lang.NoClassDefFoundError: com.jakewharton.DiskLruCache
01-24 03:45:31.109: E/AndroidRuntime(1983):     at com.integralblue.httpresponsecache.compat.libcore.net.http.HttpResponseCache.<init>(HttpResponseCache.java:83)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at com.integralblue.httpresponsecache.HttpResponseCache.<init>(HttpResponseCache.java:155)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at com.integralblue.httpresponsecache.HttpResponseCache.install(HttpResponseCache.java:192)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at com.test_cache.MainActivity.onCreate(MainActivity.java:21)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.app.Activity.performCreate(Activity.java:5243)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.app.ActivityThread.access$700(ActivityThread.java:135)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.os.Handler.dispatchMessage(Handler.java:102)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.os.Looper.loop(Looper.java:137)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at android.app.ActivityThread.main(ActivityThread.java:4998)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at java.lang.reflect.Method.invokeNative(Native Method)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at java.lang.reflect.Method.invoke(Method.java:515)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
01-24 03:45:31.109: E/AndroidRuntime(1983):     at dalvik.system.NativeStart.main(Native Method)

我从我的 libs 文件夹中的项目 HttpResponseCache by Craig Andrews 和 DiskLruCache by Jake Wharton 复制了两个 jar:

这是我的 MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
    final File httpCacheDir = new File(getCacheDir(), "http");

    try 
        com.integralblue.httpresponsecache.HttpResponseCache.install(httpCacheDir, httpCacheSize);
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
            

我在其他线程中读到它的顺序问题,所以在 Java 构建路径的 Order & Export 选项卡中,我把它放在首位:

我清理了项目,重建并没有任何工作,问题仍然存在...... 任何想法...??

谢谢。

【问题讨论】:

【参考方案1】:

因为您使用了 disklrucache-2.0.2.jarhttpresponsecache-1.3.jar

在库 httpresponsecache-1.3.jar 中使用 disklrucache-1.2.1.jar

disklrucache-1.2.1.jar 中,包为:com.jakewharton,但在 2.0.2 版中,包更改为 com.jakewharton。 disklrucache

这是根本原因。

如果你想使用 disklrucache,你应该使用 1.2.1 版本

您可以从这里下载:http://www.mediafire.com/download/e2q4vz7kdlwxxr3/disklrucache-1.2.1.jar (.jar)

或源文件:https://www.mediafire.com/?933nqqe9j4227cc (.jar)

希望对你有帮助。

【讨论】:

BRI-LLI-ANT!!这让我快疯了。非常非常感谢! 欢迎。使用 java lib 时请小心。 :)

以上是关于java.lang.NoClassDefFoundError 与 HttpResponseCache 和 DiskLruCache的主要内容,如果未能解决你的问题,请参考以下文章