0

これに関する多くの投稿を読みましたが、どれも私を助けてくれませんでした. 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)

ありがとう。

4

0 に答える 0