【问题标题】:Let user add/remove favorites from drawer/listview from position and save it to SQLite db让用户从位置添加/删除抽屉/列表视图中的收藏夹并将其保存到 SQLite db
【发布时间】:2015-08-13 10:05:50
【问题描述】:

我有一个预先填充了一些数据的 sqlite 数据库,我希望有一种方法/功能,使用户能够“保存”他的收藏夹中的信息并显示它。唯一的问题是我的查询无法正常工作。我不明白如何从活动中当前显示的数据(来自数据库)中获取位置并将其保存到数据库中。我在 db 中有一个名为“Favorites”的列,默认值设置为“no”,当用户单击按钮时,该值应更改为“yes”。

用户单击从数据库填充的列表视图中的一行,并使用intent.putExtra(来自数据库的数据)启动一个新活动。新活动在单个文本视图中显示数据。在这个新活动中,我制作了一个导航抽屉/列表视图(通过滑动或“汉堡菜单”显示)。在这个导航抽屉中,我有一个“按钮”,我想根据当前显示的数据从数据库中获取 id 并更改“收藏夹”列的值。在我使用的另一个类中

Cursor c = dbHelper.showBook(Integer.toString(position + 1));

从我最近的另一个线程中获得了这个帮助,它运行良好,但我的新问题是我有如下的 if 语句。意图的开始工作正常。但我想从我的 dbHelper 调用一个方法来更新 db 中的行。当我尝试使用上面的代码时,它不起作用(但没有错误)。吐司显示,但数据库中没有发生任何事情。

myDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {     

if (position == 0){
                Intent iHome = new Intent(DisplayBook.this, MyAccont.class);
                startActivity(iHome);
 else if (position == 3){
                dbHelper.addFavorites(Integer.toString(position+ 1));
                Toast.makeText(getApplicationContext(), "Added to favorites",    Toast.LENGTH_SHORT).show();

dbHelper.addFavorites:(addFavs 参数应该是 db 行的 id/pos,如上面的工作代码中所示) public void addFavorites(String addFavs){

SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_FAV, "yes");
String whereClause = COL_ID + " = ?" ;
String[] whereArgs = new  String[] { addFavs};

          db.update(
          TABLE_NAME,
          values,
          whereClause,
          whereArgs);

}

我已经尝试了相当多的版本以及不同的代码和东西,但没有任何效果,现在我正在寻求有关这方面的建议。我怎样才能以一种有效的方式做到这一点?非常感谢您的帮助!

编辑:通过使用数组而不是字符串生成器来解决它。我将数据库中的 id 保存在 [0] 中,并在 dbHelper.addFavorites(myStringArray[0]); 中使用它;

 public void onItemClick(AdapterView<?> parent, View view, int position, long     id) {
            Cursor c = dbHelper.aClass(Integer.toString(position + 1));
            StringBuilder sb = new StringBuilder();
            while (c.moveToNext()) {

                myStringArray[0] = c.getString(0);
                myStringArray[1] = c.getString(4);

  Intent i = new Intent(classA.this, classB.class);
                i.putExtra(null, myStringArray);

                startActivity(i);

【问题讨论】:

    标签: android database sqlite listview


    【解决方案1】:

    我不舒尔,但你的问题可能是这一行
    ContentValues values = new ContentValues();
    尝试将其更改为:
    ContentValues values = new ContentValues(1);
    根据我的经验,您应该编写要发送到数据库的变量数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2017-08-30
      • 2018-02-14
      相关资源
      最近更新 更多