これに関する多くの投稿を読みましたが、どれも私を助けてくれませんでした. sqliteOpenHelper を拡張していますが、getWriteableDatabase を呼び出すと null ポインター例外が発生します。ログステートメントを onCreate に入れましたが、表示されません。実行するたびに電話からアプリをアンインストールしてonCreateを強制しようとしましたが、実行されません。コード内のデータベース名を変更して、新しい onCreate を強制し、何もしませんでした。フラグメントからハンドラーを呼び出しています。私はホスト アクティビティ コンテキストを送信しようとしましたが、アプリケーション コンテキストは問題になる可能性があると考えていましたが、どちらも役に立ちませんでした。コードは次のとおりです。
public NewsDatabaseHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("DATABASE", "DATABASE CREATED");
String CREATE_NEWS_TABLE = "CREATE TABLE " + TABLE_NEWS + "(" + COLUMN_DBID +
" INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_TITLE + " TEXT," + COLUMN_AUTHOR + " TEXT " +
COLUMN_LINK + " TEXT " + COLUMN_PUBLISHDATE + " TEXT " + COLUMN_SNIPPET + " TEXT " +
COLUMN_CONTENT + " TEXT " + COLUMN_CATEGORY + " TEXT " + COLUMN_ID + " TEXT " + COLUMN_SECTIONNAME + " TEXT " +
COLUMN_TRAILTEXT + " TEXT " + COLUMN_LASTMOD + " TEXT " + COLUMN_THUMBNAIL + ")";
db.execSQL(CREATE_NEWS_TABLE);
Log.i("DATABASE", "DATABASE CREATED");
/*// create the newsitems table
db.execSQL("create table newsitems (_id integer primary key autoincrement, " +
"title varchar(100), author varchar(100), link varchar(100), pubdate varchar(50) snippet varchar(100), content varchar(1000), " +
"categories varchar(100), sectionid varchar(100), trailtext varchar(100), lastmod varchar(100), thumbnail varchar(100))" );*/
}
public long insertNewsItem(SingleNewsItem news){
long dbId = -1;
boolean updating = false;
ContentValues cv = new ContentValues();
cv.put(COLUMN_AUTHOR, news.getAuthor());
cv.put(COLUMN_CATEGORY, news.getCategories());
cv.put(COLUMN_CONTENT, news.getContent());
cv.put(COLUMN_ID, news.getId());
cv.put(COLUMN_LASTMOD, news.getLastModified());
cv.put(COLUMN_LINK, news.getLink());
cv.put(COLUMN_PUBLISHDATE, news.getPublishedDate());
cv.put(COLUMN_SECTIONNAME, news.getSectionName());
cv.put(COLUMN_SNIPPET, news.getContentSnippet());
cv.put(COLUMN_THUMBNAIL, news.getThumbnail());
cv.put(COLUMN_TITLE, news.getTitle());
cv.put(COLUMN_TRAILTEXT, news.getTrailText());
return getWritableDatabase().insert(TABLE_NEWS, null, cv);
}
クラスをインスタンス化するフラグメントのコードは次のとおりです。
NewsDatabaseHelper db = new NewsDatabaseHelper( ApplicationContext.getInstance());
db.insertNewsItem(item);
最後に、これが logcat です。DATABASE CREATED ENTRY がないことに注意してください:
09-20 13:26:52.370: D/AndroidRuntime(19166): Shutting down VM
09-20 13:26:52.370: W/dalvikvm(19166): threadid=1: thread exiting with uncaught exception (group=0x418db438)
09-20 13:26:52.370: E/AndroidRuntime(19166): FATAL EXCEPTION: main
09-20 13:26:52.370: E/AndroidRuntime(19166): java.lang.NullPointerException
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
09-20 13:26:52.370: E/AndroidRuntime(19166): at com.gilchrist.android.googlenews.NewsDatabaseHelper.insertNewsItem(NewsDatabaseHelper.java:104)
09-20 13:26:52.370: E/AndroidRuntime(19166): at com.gilchrist.android.googlenews.GoogleNewsMainFragment.parseGuardianJSONObject(GoogleNewsMainFragment.java:360)
09-20 13:26:52.370: E/AndroidRuntime(19166): at com.gilchrist.android.googlenews.GoogleNewsMainFragment.access$1(GoogleNewsMainFragment.java:277)
09-20 13:26:52.370: E/AndroidRuntime(19166): at com.gilchrist.android.googlenews.GoogleNewsMainFragment$FetchItemsTask.onPostExecute(GoogleNewsMainFragment.java:191)
09-20 13:26:52.370: E/AndroidRuntime(19166): at com.gilchrist.android.googlenews.GoogleNewsMainFragment$FetchItemsTask.onPostExecute(GoogleNewsMainFragment.java:1)
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.os.AsyncTask.finish(AsyncTask.java:631)
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.os.AsyncTask.access$600(AsyncTask.java:177)
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.os.Handler.dispatchMessage(Handler.java:99)
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.os.Looper.loop(Looper.java:137)
09-20 13:26:52.370: E/AndroidRuntime(19166): at android.app.ActivityThread.main(ActivityThread.java:5021)
09-20 13:26:52.370: E/AndroidRuntime(19166): at java.lang.reflect.Method.invokeNative(Native Method)
09-20 13:26:52.370: E/AndroidRuntime(19166): at java.lang.reflect.Method.invoke(Method.java:511)
09-20 13:26:52.370: E/AndroidRuntime(19166): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
09-20 13:26:52.370: E/AndroidRuntime(19166): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
09-20 13:26:52.370: E/AndroidRuntime(19166): at dalvik.system.NativeStart.main(Native Method)
ありがとう。