私は非常に初期のAndroidロード段階でNullpointer例外を取得し続けています:
Launching instrumentation android.test.InstrumentationTestRunner on 3031C2FF986F00EC
[2013-01-13 02:53:30 - Login] Test run failed: Instrumentation run failed due to 'java.lang.NullPointerException'
これは、このエラーをトリガーするOrmLiteSqliteOpenHelper(私が推測するSqliteOpenHelperである可能性もあります)サブクラスメソッドに挿入したコードの一部が原因です。このコードはロードプロセスの早い段階で呼び出されるため、これが発生するようです。残念ながら、プログラムはロードプロセスの早い段階でブレークポイントなしで停止します。
私はすでに他のコードの場所でコードを広範囲にそして首尾よくテストしました。
では、Androidにすべてが読み込まれたときに、このコードをエラーなしで実行できることをどのように知ることができますか?
参考:これは、サーバーからデータベースコンテンツをフェッチし、それをローカルのsqlliteデータベースに保存するコードです。これにより、プログラムを起動したときにデータベースが常に同じ状態(サーバーによって指定)になります。
OK編集してコードを投稿します
public class DatabaseTests extends ActivityInstrumentationTestCase2<UebersichtEinsaetze> {
private DatabaseHelperBase helper;
private UebersichtEinsaetze mainActivity;
public DatabaseTests() {
super("de.innosoft.android", UebersichtEinsaetze.class);
}
// throws exception -.-
protected void setUp() throws Exception {
super.setUp();
ユニットテストファイルで停止します。そこからどこに行くのかはわかりませんが、到達することはわかっています(UebersichtEinsaetzeのどこかで、SimpleCursorFactoryで動作する関数を超えて関数を呼び出したため):
public <T extends Entity<T, I>, I> RuntimeExceptionDao<T, I> getRTE(Class<T> clazz) {
RuntimeExceptionDao<T, I> rte = super.getRTE(clazz);
initTestdata();
return rte;
}
initTestdataは次のとおりです。
if (!init)
{
new HttpBase(new HttpGet(), "setup", "InitTestdata").evaluate();
if (!isTestdataUpToData())
{
this.dropTables();
this.createTables();
try {
Map<Class<?>, List<Object>> m = ControllerMethod.GETALL.testServer();
for (EntityRef<?> entityRef : Entity.entities) {
List<Object> l = m.get(entityRef.getClazz());
if (entityRef.getSizeOfTestTable() != l.size())
throw new Exception("Testdata inconsistency");
for (Object entity : l) {
Object dao = this.getClass().getMethod("getRTE", Class.class).invoke(this, entityRef.getClazz());
dao.getClass().getMethod("create", Object.class).invoke(dao, entity);
}
}
} catch (Exception e) {
ExceptionHandler.handle(e);
}
}
init = true;
}
}
ここで例外が発生します。このコードブロックを削除して、ディレクトリのどこかに単体テストに貼り付けると(たとえば)、機能します。しかし、私はそれをしたくありません。
logcat:
01-13 03:32:18.594: I/dalvikvm(24888): Turning on JNI app bug workarounds for target SDK version 8...
01-13 03:32:18.707: D/dalvikvm(24888): GC_CONCURRENT freed 146K, 13% free 2657K/3044K, paused 3ms+8ms, total 33ms
01-13 03:32:18.765: I/ActivityThread(24888): Pub de.innosoft.android: de.innosoft.android.test
01-13 03:32:18.816: D/dalvikvm(24888): GC_CONCURRENT freed 164K, 13% free 2983K/3396K, paused 3ms+3ms, total 37ms
01-13 03:32:18.886: D/dalvikvm(24888): GC_CONCURRENT freed 228K, 14% free 3222K/3720K, paused 3ms+2ms, total 23ms
01-13 03:32:18.886: D/dalvikvm(24888): WAIT_FOR_CONCURRENT_GC blocked 13ms
01-13 03:32:18.914: D/dalvikvm(24888): GC_FOR_ALLOC freed 245K, 16% free 3317K/3912K, paused 16ms, total 16ms
01-13 03:32:18.937: D/dalvikvm(24888): GC_FOR_ALLOC freed 241K, 15% free 3411K/4008K, paused 16ms, total 16ms
01-13 03:32:19.011: D/dalvikvm(24888): GC_CONCURRENT freed 241K, 12% free 3631K/4112K, paused 2ms+3ms, total 38ms
01-13 03:32:19.140: D/dalvikvm(24888): GC_CONCURRENT freed 96K, 8% free 4031K/4340K, paused 3ms+3ms, total 49ms
01-13 03:32:19.265: D/dalvikvm(24888): GC_CONCURRENT freed 324K, 12% free 4259K/4824K, paused 2ms+4ms, total 51ms
01-13 03:32:19.422: D/dalvikvm(24888): GC_CONCURRENT freed 505K, 15% free 4387K/5132K, paused 2ms+4ms, total 55ms
01-13 03:32:19.484: W/dalvikvm(24888): Exception Ljava/lang/NullPointerException; thrown while initializing Lde/innosoft/android/data/Consts;
01-13 03:32:19.484: D/AndroidRuntime(24888): Shutting down VM
01-13 03:32:19.484: W/dalvikvm(24888): threadid=1: thread exiting with uncaught exception (group=0x40db5930)
01-13 03:32:19.492: E/AndroidRuntime(24888): FATAL EXCEPTION: main
01-13 03:32:19.492: E/AndroidRuntime(24888): java.lang.ExceptionInInitializerError
01-13 03:32:19.492: E/AndroidRuntime(24888): at de.innosoft.android.data.HttpBase.<init>(HttpBase.java:76)
01-13 03:32:19.492: E/AndroidRuntime(24888): at de.innosoft.android.data.DatabaseHelperTestdata.initTestdata(DatabaseHelperTestdata.java:46)
01-13 03:32:19.492: E/AndroidRuntime(24888): at de.innosoft.android.data.DatabaseHelperTestdata.getRTE(DatabaseHelperTestdata.java:75)
01-13 03:32:19.492: E/AndroidRuntime(24888): at de.innosoft.android.test.onCreate(test.java:66)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.content.ContentProvider.attachInfo(ContentProvider.java:1058)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.app.ActivityThread.installProvider(ActivityThread.java:4969)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.app.ActivityThread.installContentProviders(ActivityThread.java:4582)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4524)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.app.ActivityThread.access$1300(ActivityThread.java:150)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.os.Looper.loop(Looper.java:137)
01-13 03:32:19.492: E/AndroidRuntime(24888): at android.app.ActivityThread.main(ActivityThread.java:5191)
01-13 03:32:19.492: E/AndroidRuntime(24888): at java.lang.reflect.Method.invokeNative(Native Method)
01-13 03:32:19.492: E/AndroidRuntime(24888): at java.lang.reflect.Method.invoke(Method.java:511)
01-13 03:32:19.492: E/AndroidRuntime(24888): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
01-13 03:32:19.492: E/AndroidRuntime(24888): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
01-13 03:32:19.492: E/AndroidRuntime(24888): at dalvik.system.NativeStart.main(Native Method)
01-13 03:32:19.492: E/AndroidRuntime(24888): Caused by: java.lang.NullPointerException
01-13 03:32:19.492: E/AndroidRuntime(24888): at de.innosoft.android.data.Consts.<clinit>(Consts.java:36)
01-13 03:32:19.492: E/AndroidRuntime(24888): ... 18 more