2014-12-10 11 views
5

Sto utilizzando activeandroid nella mia app Android.Tentativo di richiamare il metodo virtuale 'java.lang.Class java.lang.reflect.Field.getType()' su un oggetto nullo di riferimento

Tutto funziona correttamente eseguendo una build di debug durante lo sviluppo. Dopo aver creato una build di rilascio del mio progetto, l'app si arresta in modo anomalo. Questo accade su un Nexus5 con Android 5.0 e su un Nexus 7 con Android 4.4.2.

Ecco il codice sorgente se è necessario dare un'occhiata!
https://github.com/MetalMatze/Krautreporter

Grazie!

java.lang.RuntimeException: Unable to create application com.activeandroid.app.Application: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.reflect.Field.getType()' on a null object reference 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4521) 
at android.app.ActivityThread.access$1500(ActivityThread.java:144) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1339) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.reflect.Field.getType()' on a null object reference 
at com.activeandroid.e.f.c(Unknown Source) 
at com.activeandroid.e.f.c(Unknown Source) 
at com.activeandroid.f.c(Unknown Source) 
at com.activeandroid.f.onCreate(Unknown Source) 
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251) 
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 
at com.activeandroid.b.b(Unknown Source) 
at com.activeandroid.b.a(Unknown Source) 
at com.activeandroid.a.a(Unknown Source) 
at com.activeandroid.a.a(Unknown Source) 
at com.activeandroid.a.a(Unknown Source) 
at com.activeandroid.app.Application.onCreate(Unknown Source) 
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4518) 
... 9 more 

risposta

2

È possibile utilizzare la riflessione per trovare un campo in base al nome. La tua build di rilascio viene sottoposta a crunch da Proguard che rinomina i campi con qualcosa di breve e oscuro. È necessario aggiungere un'eccezione a Proguard per mantenere i nomi dei campi a cui si accede utilizzando il reflection.

C'è già una risposta per come mantenere i campi in tutte o alcune classi qui: https://stackoverflow.com/a/23365501/2444099

+2

avevi ragione. Grazie! Con queste regole proguard ho capito: https://github.com/rejasupotaro/Rebuild/blob/5246f6549fd854207c28d7b8179680034f81cbd9/Rebuild/proguard-release.txt#L68 –