2017-02-05 7 views
0

私はリストビューを持っていますデータベースファイルからデータを入力し、 'Selected_Database_File_Name'を使ってファイル名を渡しますが、データベースを閉じて新しいデータベースを渡すと'Selected_Database_File_Name'を使用してファイル名を指定し、listviewを埋めると、以前のデータベースファイルの値がそのまま残ります。リストビューに新しい値を書き込む前に、配列アダプタをnullに設定しました。なぜそれが新しいファイル値で再ロードされないのでしょうか?2つの別々のデータベースファイルのデータでリストビューを塗りつぶします

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

import static com.example.cryptonote.MainActivity.Selected_Database_File_Name; 

public class NotesDbAdapter { 

public static final String KEY_TITLE = "title"; 
public static final String KEY_DATE = "date"; 
public static final String KEY_BODY = "body"; 
public static final String KEY_ROWID = "_id"; 
private static final String TAG = "NotesDbAdapter"; 
public DatabaseHelper mDbHelper; 
public SQLiteDatabase mDb; 

private static final String DATABASE_CREATE = 
    "create table notes (_id integer primary key autoincrement, " 
    + "title text not null, body text not null, date text not null);"; 

private static final String DATABASE_NAME = Selected_Database_File_Name; 
private static final String DATABASE_TABLE = "notes"; 
private static final int DATABASE_VERSION = 2; 
private final Context mCtx; 
private static class DatabaseHelper extends SQLiteOpenHelper { 

    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS notes"); 
     onCreate(db); 
    } 
} 

public NotesDbAdapter(Context ctx) { 
    this.mCtx = ctx; 
} 

public NotesDbAdapter open() throws SQLException { 
    mDbHelper = new DatabaseHelper(mCtx); 
    mDb = mDbHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    mDbHelper.close(); 
} 

public long createNote(String title, String body, String date) { 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(KEY_TITLE, title); 
    initialValues.put(KEY_BODY, body); 
    initialValues.put(KEY_DATE, date); 
    return mDb.insert(DATABASE_TABLE, null, initialValues); 
} 

public boolean deleteNote(long rowId) { 
    return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
} 

public Cursor fetchAllNotes() { 
    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, 
      KEY_BODY,KEY_DATE}, null, null, null, null, null); 
} 

public Cursor fetchNote(long rowId) throws SQLException { 
    Cursor mCursor = 
     mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, 
       KEY_TITLE, KEY_BODY,KEY_DATE}, KEY_ROWID + "=" + rowId, null, 
       null, null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 
} 

public boolean updateNote(long rowId, String title, String body,String date) { 
    ContentValues args = new ContentValues(); 
    args.put(KEY_TITLE, title); 
    args.put(KEY_BODY, body); 
    args.put(KEY_DATE, date); 
    return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) >  0; 
} 
public boolean isOpen() { 
    return   mDb.isOpen(); 
} 
} 

答えて

0

あなたDATABASE_NAMEは、それが値を変更する習慣private static finalであるオブジェクトを再作成されていない場合。

+0

ヒントはありがたくありがとうございますが、私はどんなタイプを定義すればいいのですか? – Simon

+0

これをプライベートにして、セッターメソッドを作成してアクティビティから(または使用して)変更することができます。そして、dbを開きます。 – SILL

+0

私はそれをただ私的なものにします。Public DatabaseHelper(コンテキストコンテキスト){ super(コンテキスト、DATABASE_NAME、null、DATABASE_VERSION); } DATABASE_NAMEは静的として定義する必要があります – Simon

関連する問題