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;
}