Прошло несколько недель, и я не могу решить проблему. Вот он: Когда пользователь нажимает на изображение, я хочу обновить базу данных, чтобы добавить игру в «Избранное». Но я не знаю, почему, этого не будет. (Я использую базу данных, созданную с помощью браузера БД). Вот мой код:Обновление базы данных в приложении для Android
Обновление кода
favorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pref = "co";
favorite.setVisibility(View.GONE);
co.setVisibility(View.VISIBLE);
mDBHelper = new DataHelper(getApplication());
mDBHelper.openDataBase();
SQLiteDatabase mDB = mDBHelper.getWritableDatabase();
//mDB.open();
mDB.beginTransaction();
ContentValues values = new ContentValues();
values.put("pref", pref);
//String selection = "_id" +" = '" + ID + "'";
String[]selectionArgs = new String[1];
selectionArgs[0] = "" + ID;
mDB.update("tgames",
values,
"_id= ?",
selectionArgs);
mDB.setTransactionSuccessful();
mDB.endTransaction();
mDB.close();
данных кода Helper
public class DataHelper extends SQLiteOpenHelper {
public static final String TABLE_ROW_ID = "_id";
public static final String TABLE_ROW_NAME = "name";
public static final String TABLE_ROW_PLACE = "place";
public static final String TABLE_ROW_AGEMIN = "agemin";
public static final String TABLE_ROW_AGEMAX = "agemax";
public static final String TABLE_ROW_NBREMIN = "nbremin";
public static final String TABLE_ROW_NBREMAX = "nbremax";
public static final String TABLE_ROW_TYPE = "type";
public static final String TABLE_ROW_DESCRIPTION = "description";
public static final String TABLE_ROW_PREF = "pref";
public static final String TABLE_ROW_IMG = "img";
private static final String TABLE_GAMES = "tgames";
private static final int DB_VERSION = 1;
private static String TAG = "DataHelper";
private static String DB_PATH = "";
private static String DB_NAME = "games.db";
public static SQLiteDatabase mDB;
private final Context mContext;
File dbFile =new File(DB_PATH + DB_NAME);
public DataHelper(Context context){
super(context, DB_NAME, null, DB_VERSION);
if (Build.VERSION.SDK_INT >= 17){
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
//DB_PATH = context.getFilesDir().toString();
}else{
DB_PATH="/data/data/" + context.getPackageName() + "/databases/";
}
this.mContext = context;
}
public void createDataBase() throws IOException
{
boolean mDataBaseExist = checkDataBase();
if(!mDataBaseExist){
this.getReadableDatabase();
}
this.close();
try{
copyDataBase();
Log.e(TAG, "createDatabase data base created");
}catch (IOException mIOException){
//throw new Error("ErroCopyingDatabase");
}
}
private boolean checkDataBase(){
File dbFile =new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
private void copyDataBase() throws IOException{
InputStream mInput = mContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream mOutPut = new FileOutputStream(outFileName);
byte[] mBuffer = new byte [1024];
int mLength;
while ((mLength = mInput.read(mBuffer))>0){
mOutPut.write(mBuffer, 0, mLength);
}
mOutPut.flush();
mOutPut.close();
mInput.close();
}
public boolean openDataBase() throws SQLiteException {
String mPath = DB_PATH + DB_NAME;
mDB = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
//mDB = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
return mDB != null;
}
public static Cursor selectAll(){
Cursor cAll = mDB.rawQuery("SELECT * from tgames", null);
return cAll;
}
public static Cursor searchSIMPLE (String name, String place, int agemin, int agemax, int nbre, String type, String favorite){
//A redefinir selon le critère
//peut etre une recherche par colonne, si élément est pas null? (mais les critères s'entrecroiseront pas alors)
String query = "SELECT * from " +
TABLE_GAMES + " WHERE " +
TABLE_ROW_AGEMIN + " <= '" + agemin + "' AND " +
TABLE_ROW_AGEMAX + " >= '" + agemax + "' AND " +
TABLE_ROW_NBREMIN + " <= '" + nbre + "' AND " +
TABLE_ROW_NBREMAX + " >= '" + nbre + "' AND " +
TABLE_ROW_PLACE + " = '" + place + "';";
Cursor c = mDB.rawQuery(query, null);
return c;
}
public static Cursor searchADV (String name, String place, int agemin, int agemax, int nbre, String type, String favorite){
String query = "SELECT * from " +
TABLE_GAMES + " WHERE " +
TABLE_ROW_AGEMIN + " <= '" + agemin + "' AND " +
TABLE_ROW_AGEMAX + " >= '" + agemax + "' AND " +
TABLE_ROW_NBREMIN + " <= '" + nbre + "' AND " +
TABLE_ROW_NBREMAX + " >= '" + nbre + "' AND " +
TABLE_ROW_PLACE + " = '" + place + "' AND " +
/*TABLE_ROW_PREF + " = '" + favorite + "'AND " +*/
TABLE_ROW_TYPE + " = '" + type + "' ;";
Cursor c = mDB.rawQuery(query, null);
return c;
}
public static Cursor searchADVName (String name, String place, int agemin, int agemax, int nbre, String type, String favorite){
String query = "SELECT * from " +
TABLE_GAMES + " WHERE " +
TABLE_ROW_AGEMIN + " <= '" + agemin + "' AND " +
TABLE_ROW_AGEMAX + " >= '" + agemax + "' AND " +
TABLE_ROW_NBREMIN + " <= '" + nbre + "' AND " +
TABLE_ROW_NBREMAX + " >= '" + nbre + "' AND " +
TABLE_ROW_PLACE + " = '" + place + "' AND " +
TABLE_ROW_TYPE + " = '" + type + "' AND " +
/*TABLE_ROW_PREF + " = '" + favorite + "'AND " +*/
TABLE_ROW_NAME + " LIKE '%" + name + "%' ; ";
Cursor c = mDB.rawQuery(query, null);
return c;
}
public static Cursor randomMachine(){
int cnt = getCount(selectAll());
Random r = new Random();
int r1 = r.nextInt(cnt)+1;
String r2 = String.valueOf(r1);
String sql ="SELECT * FROM tgames WHERE _id = '" + r2 + "';" ;
Log.i("TEST", sql);
Cursor mCur = mDB.rawQuery(sql, null);
return mCur;
}
public static Cursor getType(String type)
{
String sql ="SELECT * FROM tgames WHERE type = '" +type + "';";
Cursor mCur = mDB.rawQuery(sql, null);
return mCur;
}
private static int getCount(Cursor c){
int cnt = c.getCount();
return cnt;
}
@Override
public void onCreate(SQLiteDatabase mDB) {
}
@Override
public void onUpgrade(SQLiteDatabase mDB, int oldVersion, int newVersion) {
Log.v("TEST", "Upgrade 1");
mDB.execSQL("DROP TABLE IF EXISTS " + "tgames");
try {
createDataBase();
}catch (Exception e){
Log.v("TEST", "Upgrade FAILED");
}
}
}
Спасибо за вашу помощь.
EDIT: Я забыл, я выполняю эту операцию в дочерней деятельности основного вида деятельности. Когда я закрываю его и снова открываю, начальное состояние (любимое или нет) не изменилось. ,
Вы получаете какие-либо ошибки? – Rohit5k2
Thats weird part, у меня нет никакой ошибки, все идет гладко. – Enima
Показать определение таблицы. –