android sqlite nullpointerexception ormlite

android - Informes accidentales de NullPointerException utilizando DatabaseHelper estático



sqlite ormlite (2)

Ayudaría si publica el código donde ocurre el problema

at bd.a(Document.java:654)

Pero como sugerencia general que podría resolver su problema, puede considerar inicializar el asistente de la base de datos en una clase de application no esté en ninguna actividad, ya que parece que se usa para toda la aplicación y no depende del contexto específico de la actividad.

Editar

Creo que necesita romper el código en la línea 654 porque es difícil saber qué función devuelve nulo. p.ej

DatabaseHelper helper = DatabaseHelper.getInstance(); ...

Recibo informes aleatorios de NullPointerException de Google que no se pueden reproducir. Estoy usando una referencia estática a una clase que extiende OrmLiteSqliteOpenHelper. El helper se inicializa en la clase principal que amplía SherlockFragmentActivity.

if (DatabaseHelper.getInstance() == null) { DatabaseHelper.setInstance(this.getApplicationContext()); }

Al principio pensé que podría ocurrir cuando el dispositivo se gira o se envía al fondo. Pero ninguna cantidad de prueba ha sido capaz de recrear el problema.

En ninguna parte del código está la variable mHelper estática establecida en nulo

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { … private static DatabaseHelper mHelper; … public static DatabaseHelper getInstance() { return DatabaseHelper.mHelper; } public static void setInstance(Context context) { DatabaseHelper.mHelper = new DatabaseHelper(context); } … }

¿Alguien tiene alguna idea de lo que puede estar causando esto?

Follows es uno de los informes:

java.lang.RuntimeException: Unable to start activity ComponentInfo{au.com.dcbs.tradies/au.com.dcbs.tradies.presentation.document.DocumentActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2049) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2083) at android.app.ActivityThread.access$600(ActivityThread.java:134) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1233) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4697) 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:787) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at bd.a(Document.java:654) at au.com.dcbs.tradies.presentation.document.DocumentActivity$a.b(DocumentActivity.java:102) at au.com.dcbs.tradies.presentation.document.DocumentActivity$a.onActivityCreated(DocumentActivity.java:78) at e.a(FragmentManager.java:891) at e.a(FragmentManager.java:1080) at e.a(FragmentManager.java:1062) at e.k(FragmentManager.java:1810) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:501) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133) at android.app.Activity.performStart(Activity.java:4549) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2022) ... 11 more

La línea 654 es la primera línea en este método:

public static Document get(long id, Context context) { DocumentEntity entity = DatabaseHelper.getInstance().getDocumentDao().queryForId((int)id); Document doc = new Document(entity, context); return doc; }

getDocumentDao devuelve un objeto de tipo com.j256.ormlite.dao.RuntimeExceptionDao


En Android, no garantiza que la variable de campo estática no siempre se mantenga, debería ...

public static DatabaseHelper getInstance(Context context) { if (mHelper == null) { mHelper = new DatabaseHelper(context); } return mHelper; }