房间数据库@Delete没有执行

时间:2018-01-28 16:52:59

标签: android android-room

我正在尝试从我创建的会议室数据库中删除一行。

奇怪的是,只有我第一次执行命令时才会删除该行:

App.get().getDB().productDao().delete(myArrayList.get(clickedItemIndex));

第一次尝试再次删除该行后,一切正常并删除。

我删除行的活动:

private class DeletePelati extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //Perform pre-adding operation here.
    }
    @Override
    protected Void doInBackground(Void... voids) {
       App.get().getDB().productDao().delete(myArrayList.get(clickedItemIndex));
       return null;
    }
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        //To after addition operation here.
        setResult(pelatis,3);
        finish();
    }
}

然后,当我重新启动我的应用程序时,删除查询将正常执行。

这是我的App扩展了Aplication:

public class App extends Application {

public static App INSTANCE;
private static final String DATABASE_NAME = "MyDatabase";
private static final String PREFERENCES = "RoomDemo.preferences";
private static final String KEY_FORCE_UPDATE = "force_update";

private MyDatabase database;

public static App get() {
    return INSTANCE;
}

@Override
public void onCreate() {
    super.onCreate();
    Stetho.initializeWithDefaults(this);

    // create database
    database = Room.databaseBuilder(getApplicationContext(),MyDatabase.class,DATABASE_NAME)
            .build();

    INSTANCE = this;
}

public MyDatabase getDB() {
    return database;
}

public boolean isForceUpdate() {
    return getSP().getBoolean(KEY_FORCE_UPDATE, true);
}

public void setForceUpdate(boolean force) {
    SharedPreferences.Editor edit = getSP().edit();
    edit.putBoolean(KEY_FORCE_UPDATE, force);
    edit.apply();
}

private SharedPreferences getSP() {
    return getSharedPreferences(PREFERENCES, MODE_PRIVATE);
}

public  void cleanUp(){
    database = null;
}
}

这是我的DAO课程:

@Dao
public interface PelatesDao {

@Query("SELECT * FROM Pelates")
List<Pelates> getAll();

@Query("SELECT * FROM Pelates WHERE name LIKE :name LIMIT 1")
Pelates findByName(String name);

@Insert
void insertAll(List<Pelates> pelates);

@Insert
void insert(Pelates pelates);

@Update
void update(Pelates pelates);

@Delete
void delete(Pelates pelates);
}

1 个答案:

答案 0 :(得分:0)

而不是使用@Delete来使用:

react-native run-android

在上面的示例中,Test是表名,@Query("DELETE FROM Test WHERE id=:arg0") fun deleteById(position: Int) 是WHERE子句 在传递的函数参数中是where子句字段的值。

邮编上面的例子是科特林语言。