在应用程序onCreate中初始化类时java.lang.NoClassDefFoundError

时间:2016-01-04 22:39:39

标签: java android android-volley android-lru-cache

我正在尝试在我的应用程序ng-submit="employeessController.submit()"方法上实例化一个类,如下所示:

onCreate

以下是我的volleyQueueInstance = VolleySingleton.getInstance(getApplicationContext()); 课程

VolleySingleton

但我的应用程序在启动时崩溃,其中包含以下堆栈跟踪,表示没有为类public class VolleySingleton { private static VolleySingleton mInstance; private RequestQueue mRequestQueue; private ImageLoader mImageLoader; private static Context mCtx; private VolleySingleton(Context context) { mCtx = context; mRequestQueue = getRequestQueue(); mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() { private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(30); @Override public Bitmap getBitmap(String url) { return cache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { cache.put(url, bitmap); } }); } public static synchronized VolleySingleton getInstance(Context context) { if (mInstance == null) { mInstance = new VolleySingleton(context); } return mInstance; } public RequestQueue getRequestQueue() { if (mRequestQueue == null) { // getApplicationContext() is key, it keeps you from leaking the // Activity or BroadcastReceiver if someone passes one in. mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); } return mRequestQueue; } public <T> void addToRequestQueue(Request<T> req) { getRequestQueue().add(req); } public ImageLoader getImageLoader() { return mImageLoader; } } 找到类定义

VolleySingleton

我是java和android的新手,我无法弄清楚为什么它找不到这个类。据我所知,它能够找到类,但异常发生在我试图定义java.lang.NoClassDefFoundError: rides.even.odd.oddorevenrides.volleyclasses.VolleySingleton$1 at rides.even.odd.oddorevenrides.volleyclasses.VolleySingleton.<init>(VolleySingleton.java:25) at rides.even.odd.oddorevenrides.volleyclasses.VolleySingleton.getInstance(VolleySingleton.java:44) at rides.even.odd.oddorevenrides.MyApplication.instantiateVolleyQueue(MyApplication.java:35) at rides.even.odd.oddorevenrides.MyApplication.onCreate(MyApplication.java:31) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4151) at android.app.ActivityThread.access$1300(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 的构造函数中。我不确定。任何帮助都会非常感激。

更新

好的,我尝试使用其他设备(Samsung s4)启动该应用程序,该应用程序运行正常。但是,当我尝试使用其他设备(三星Google Nexus S)时,它会因上述堆栈跟踪而崩溃。

更新#2

我错过了上面的堆栈跟踪中的一些日志条目,也许这可以帮助弄清楚最新情况。

mImageLoader

1 个答案:

答案 0 :(得分:4)

好的,经过几个小时的研究,我终于得以解决了。这里的问题是MultiDex支持。我在我的应用程序中获得了部分multidex支持

multiDexEnabled true

在我的build.gradle文件中,但我的应用程序正在扩展Application类。

我的应用程序类扩展了MultiDexApplication类,并在我的应用程序类文件中添加了以下方法。

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

能够通过研究以下日志条目来解决它。

01-05 05:46:12.949    3029-3029/rides.even.odd.oddorevenrides D/dalvikvm﹕ DexOpt: unable to opt direct call 0xfd9f at 0x1f in Lrides/even/odd/oddorevenrides/volleyclasses/VolleySingleton;.<init>