MainActivity の onCreate 中に sqlite データベースに値を自動的に挿入しようとしています。
ここにいくつかのコードがあります:
public static final String KEY_RULEID = "_id";
public static final String KEY_RULE = "rule";
public static final String KEY_TYPE = "type";
public static final String KEY_ENABLED = "enabled";
private static final String rulesc = "??????";
private static final int typesc = 0;
private static final String enabledsc = "TRUE";
private SQLiteDatabase db;
/* insert default rules into the database */
private void insertDefaultRule(String rule, int type, String enabled) {
ContentValues defaultValues = new ContentValues();
defaultValues.put(KEY_RULE, rulesc);
defaultValues.put(KEY_TYPE, typesc);
defaultValues.put(KEY_ENABLED, enabledsc);
System.out.println("line 175");
db.insert(Constants.DATABASES_TABLE_RULES, null, defaultValues);
}
行 175 がシステム ログに出力されるので、db.insert 行がエラーの原因であることがわかります。主なエラーは NullPointerException ですが、これは残りの半分であり、役立つ場合があります。
java.lang.NullPointerException
E/AndroidRuntime(7178): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
E/AndroidRuntime(7178): at com.prototype.sample.RulesDatabaseAdapter.open(RulesDatabaseAdapter.java:55)
E/AndroidRuntime(7178): at com.prototype.sample.RulesDatabaseAdapter.insertDefualtRules(RulesDatabaseAdapter.java:155)
E/AndroidRuntime(7178): at com.prototype.sample.MessagesList.DefaultRules(MessagesList.java:88)
E/AndroidRuntime(7178): at com.prototype.sample.MessagesList.onCreate(MessagesList.java:53)
E/AndroidRuntime(7178): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(7178): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
E/AndroidRuntime(7178): ... 11 more
編集:情報を追加しました。このクラスは SQLiteOpenHelper を拡張します。
Constants.DATABASES_TABLE_RULES は、Constants クラスで次のように定義されています。
public final static String DATABASES_TABLE_RULES = "rules";
DB を開くコード:
/* opens the database */
public RulesDatabaseAdapter open() throws SQLException {
db = DBHelper.getWritableDatabase();
return this;
}