java.lang.NoClassDefFoundError с HttpResponseCache и DiskLruCache
Я пытаюсь проверить эту библиотеку кеша в новом проекте 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)
Я скопировал обе банки из проектов HttpResponseCache Крейга Эндрюса и DiskLruCache Джейка Уортона в мою папку libs:
Это мой 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 я поставил это на первое место:
Я чищу проект, перестраиваюсь и ничего не получается, проблема сохраняется...
Любая идея...??
Благодарю.
1 ответ
Потому что вы использовали disklrucache-2.0.2.jar и httpresponsecache-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)
Надеюсь, это поможет вам.