9

Ho riscontrato un bug molto interessante in una delle mie app. La mia app funziona perfettamente su Android L, ma non appena provo a eseguirlo su altre versioni di Android, ricevo ClassNotFoundException o NoClassDefFoundError mentre provo a chiamare i servizi Web utilizzando Retrofit, anche se tutte quelle classi sono esistenti e funzionano bene sul mio dispositivo Android L. Non so cosa sta succedendo in questo momento, l'app è in esecuzione in altre versioni, purché non crei una richiesta di rete, ma non appena vado su Richiesta di rete, mi dà sia ClassNotFoundException o NoClassDefFoundError. Inoltre sto usando Android Studio, quindi se qualcuno ha già affrontato questo tipo di problema in precedenza, per favore aiutatemi, ho un grave bisogno.Ottenere TypeNotPresentException seguito da ClassNotFoundException o NoClassDefFoundError su tutte le versioni di Android tranne Android L

NOTA: l'app funziona correttamente su Android L e anche le classi in cui sto ottenendo ClassNotFoundException o NoClassDefFoundError non sono specifiche della versione, non è che siano supportate in Android L o così. Tutte le classi in cui sto ricevendo questi errori sono classi generali personalizzate/modello e non hanno alcun collegamento con le versioni più alte di Android o qualcosa del genere.

E questi sono i miei errori Logcat

questa è l'eccezione, mentre colpisce login api

java.lang.TypeNotPresentException: Type com.codebrew.embazaar.pojo.UserLoginPojo not present 
      at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:63) 
      at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:72) 
      at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
      at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
      at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:71) 
      at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
      at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
      at libcore.reflect.Types.getTypeArray(Types.java:50) 
      at java.lang.reflect.Method.getGenericParameterTypes(Method.java:216) 
      at retrofit.RestMethodInfo.parseResponseType(RestMethodInfo.java:250) 
      at retrofit.RestMethodInfo.<init>(RestMethodInfo.java:97) 
      at retrofit.RestAdapter.getMethodInfo(RestAdapter.java:213) 
      at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:236) 
      at $Proxy0.userLogin(Native Method) 
      at com.codebrew.embazaar.MainActivity.loginUser(MainActivity.java:529) 
      at com.codebrew.embazaar.MainActivity.onClick(MainActivity.java:324) 
      at android.view.View.performClick(View.java:4748) 
      at android.view.View$PerformClick.run(View.java:19535) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5679) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassNotFoundException: com.codebrew.embazaar.pojo.UserLoginPojo 
      at java.lang.Class.classForName(Native Method) 
      at java.lang.Class.forName(Class.java:251) 
      at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:61) 
            at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:72) 
            at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
            at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
            at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:71) 
            at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
            at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
            at libcore.reflect.Types.getTypeArray(Types.java:50) 
            at java.lang.reflect.Method.getGenericParameterTypes(Method.java:216) 
            at retrofit.RestMethodInfo.parseResponseType(RestMethodInfo.java:250) 
            at retrofit.RestMethodInfo.<init>(RestMethodInfo.java:97) 
            at retrofit.RestAdapter.getMethodInfo(RestAdapter.java:213) 
            at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:236) 
            at $Proxy0.userLogin(Native Method) 
            at com.codebrew.embazaar.MainActivity.loginUser(MainActivity.java:529) 
            at com.codebrew.embazaar.MainActivity.onClick(MainActivity.java:324) 
            at android.view.View.performClick(View.java:4748) 
            at android.view.View$PerformClick.run(View.java:19535) 
            at android.os.Handler.handleCallback(Handler.java:733) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5679) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NoClassDefFoundError: com/codebrew/embazaar/pojo/UserLoginPojo 
            at java.lang.Class.classForName(Native Method) 
            at java.lang.Class.forName(Class.java:251) 
            at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:61) 
            at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:72) 
            at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
            at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
            at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:71) 
            at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
            at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
            at libcore.reflect.Types.getTypeArray(Types.java:50) 
            at java.lang.reflect.Method.getGenericParameterTypes(Method.java:216) 
            at retrofit.RestMethodInfo.parseResponseType(RestMethodInfo.java:250) 
            at retrofit.RestMethodInfo.<init>(RestMethodInfo.java:97) 
            at retrofit.RestAdapter.getMethodInfo(RestAdapter.java:213) 
            at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:236) 
            at $Proxy0.userLogin(Native Method) 
            at com.codebrew.embazaar.MainActivity.loginUser(MainActivity.java:529) 
            at com.codebrew.embazaar.MainActivity.onClick(MainActivity.java:324) 
            at android.view.View.performClick(View.java:4748) 
            at android.view.View$PerformClick.run(View.java:19535) 
            at android.os.Handler.handleCallback(Handler.java:733) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5679) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.codebrew.embazaar.pojo.UserLoginPojo" on path: DexPathList[[zip file "/data/app/com.codebrew.embazaar-11.apk"],nativeLibraryDirectories=[/data/app-lib/com.codebrew.embazaar-11, /vendor/lib, /system/lib]] 
      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
            at java.lang.Class.classForName(Native Method) 
            at java.lang.Class.forName(Class.java:251) 
            at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:61) 
            at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:72) 
            at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
            at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
            at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:71) 
            at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) 
            at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) 
            at libcore.reflect.Types.getTypeArray(Types.java:50) 
            at java.lang.reflect.Method.getGenericParameterTypes(Method.java:216) 
            at retrofit.RestMethodInfo.parseResponseType(RestMethodInfo.java:250) 
            at retrofit.RestMethodInfo.<init>(RestMethodInfo.java:97) 
            at retrofit.RestAdapter.getMethodInfo(RestAdapter.java:213) 
            at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:236) 
            at $Proxy0.userLogin(Native Method) 
            at com.codebrew.embazaar.MainActivity.loginUser(MainActivity.java:529) 
            at com.codebrew.embazaar.MainActivity.onClick(MainActivity.java:324) 
            at android.view.View.performClick(View.java:4748) 
            at android.view.View$PerformClick.run(View.java:19535) 
            at android.os.Handler.handleCallback(Handler.java:733) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5679) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
            at dalvik.system.NativeStart.main(Native Method) 

e questo sto ottenendo mentre colpisce dimenticato la password richiesta di rete

java.lang.NoClassDefFoundError: com.codebrew.embazaar.MainActivity$7$1 
      at com.codebrew.embazaar.MainActivity$7.onClick(MainActivity.java:392) 
      at android.view.View.performClick(View.java:4748) 
      at android.view.View$PerformClick.run(View.java:19535) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5679) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
      at dalvik.system.NativeStart.main(Native Method) 

** IMPORTANTE: mentre eseguo il debug del mio codice, ricevo TypeNotPresentException che è un'eccezione non controllata seguita da questi ClassNotFoundException o NoClassDefFoundError. Sto menzionando questo qui perché penso che questa cosa possa fare chiarezza sulla mia domanda/problema.

Ecco il mio MainActivityCommonPojo e gradle file

+0

Conosco questi errori, quali sono le super classi di com.codebrew.embazaar.MainActivity? Ad esempio, manca una classe ti sei perso la libreria compat. – rekire

+0

vuoi dire la super classe ?? La mia classe MainActivity sta estendendo la classe di attività –

+0

Penso che potresti utilizzare classi introdotte in API 21. Come schede, vista Recycler. Prova a utilizzare la libreria compatibile per supportare versioni precedenti. https://developer.android.com/training/material/compatibility.html –

risposta

6

Questo è perché avete

multiDexEnabled = true 

sul file Gradle.

Quando si attiva il multidex, è necessario assicurarsi che tutti i file classes.dex vengano caricati all'avvio dell'applicazione. Altrimenti fallirà il caricamento di classi che non si trovano nel primo file classes.dex.

Questo non è necessario in Android L, poiché supporta il caricamento di più file dex all'avvio, non solo uno.

Al fine di ottenere questo risultato, si può provare una delle seguenti opzioni:

  • rimuovere multiDexEnabled = true, ma si può superare il limite di 65K metodo.
  • seguire le istruzioni sullo https://developer.android.com/tools/building/multidex.html, in particolare l'aggiunta della dipendenza

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

    , e rendere il vostro oggetto eredita applicazione o inizio alle MultiDexApplication.

+0

Grazie amico, hai reso la mia giornata .. :) –

Problemi correlati