0

こんにちはこれは私のdbヘルパークラスです。私はcreateWordのmethotを呼び出してdatabeseを作成しています。それは働いている。しかし、私がlistEnWordsメソッドを呼び出してrecyclerviewに表示すると、私はnullpointerexeptionをとっています。私の状況は間違っていると思う。どのように私の文脈を変えるべきですか?リストデータベースNullpointer例外

のjava.lang.NullPointerException:仮想メソッドを呼び出すための試み「android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.Stringで、int型、android.database.sqlite.SQLiteDatabase $ CursorFactory、アンドロイド.database.DatabaseErrorHandler「)nullオブジェクト参照

public class WordsDbHelper extends SQLiteOpenHelper { 

private static final int DATABASE_VERSION = 3; 
private static final String DATABASE_NAME = "words.db"; 
private Context context; 

public WordsDbHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    this.context=context; 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 
    final String SQL_CREATE_BOOKS_TABLE = 

      "CREATE TABLE " + WordEntry.table_WORDS + " (" + 

        WordEntry.word_iD + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 

        WordEntry.word_ENG + " TEXT NOT NULL, " + 

        WordEntry.word_TR + " TEXT NOT NULL)"; 

    db.execSQL(SQL_CREATE_BOOKS_TABLE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + WordEntry.table_WORDS); 
    onCreate(db); 
} 

public void createWord(Words book) { 
    String table_WORDS = "words"; 
    String word_ENG = "engWord"; 
    String word_TR = "trWord"; 

    // get reference of the BookDB database 
    SQLiteDatabase db = this.getWritableDatabase(); 

    // make values to be inserted 
    ContentValues values = new ContentValues(); 
    values.put(word_ENG, book.getEngWord()); 
    values.put(word_TR, book.getTrWord()); 

    // insert book 
    db.insertWithOnConflict(table_WORDS, null, values, SQLiteDatabase.CONFLICT_IGNORE); 

    // close database transaction 
    db.close(); 
} 

public List<String> listEnWords() { 
    List<String> dataEng = new ArrayList<>(); 

    SQLiteDatabase db = this.getWritableDatabase(); //Error is here 
    String[] columns = {WordEntry.word_iD, WordEntry.word_ENG, WordEntry.word_TR}; 

    Cursor cursor = db.query(WordEntry.table_WORDS, columns, null, 
      null, 
      null, 
      null, 
      null); 

    while (cursor.moveToNext()) { 
     dataEng.add(cursor.getString(0) + "-" + cursor.getString(1)); 

    } 
    return dataEng; 
} 

public List<String> listTrWords() { 
    List<String> dataTr = new ArrayList<>(); 

    SQLiteDatabase db = this.getWritableDatabase(); 
    String[] columns = {WordEntry.word_iD, WordEntry.word_ENG, WordEntry.word_TR}; 

    Cursor cursor = db.query(WordEntry.table_WORDS, columns, 
      null, 
      null, 
      null, 
      null, 
      null); 

    while (cursor.moveToNext()) { 
     dataTr.add(cursor.getString(2)); 

    } 
    return dataTr; 
} 

に私はこのようなrecyclervievのアダプタからのリストのメソッドを呼び出しています。

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { 
    WordListRecyclerItemViewHolder holder = (WordListRecyclerItemViewHolder) viewHolder; 

    WordsDbHelper helper = new WordsDbHelper(null); 

    List<String> enWordData = helper.listEnWords(); 
    List<String> trWordData = helper.listTrWords(); 

    String itemEnText = enWordData.get(position); 
    String itemTrText = trWordData.get(position); 

    holder.setNewsTitle(itemEnText + ". word"); 
    holder.setNewsDesc(itemTrText + ". kelime"); 
} 

答えて

0
WordsDbHelper helper = new WordsDbHelper(null); 

あなたは、このクラスのスーパー(コンテキスト、DATABASE_NAME、ヌル、DATABASE_VERSION)は、コンテキストヌルを持つと呼ばれるインスタンス化するとき。 SQLiteOpenHelperはnullコンテキストを受け入れません。あなたはそれを提供する必要があります。

+0

nullの代わりにコンテキストを書き込もうとしました。 WordsDbHelperヘルパー=新しいWordsDbHelper(コンテキスト)のように;しかし、それでも同じexeption –

+0

ここをクリックしてくださいhttps://stackoverflow.com/questions/12849930/passing-context-to-sqliteopenhelper。これはあなたを助けると思います。 –

関連する問題