无法更新查询Android

时间:2015-10-04 06:58:31

标签: android

这不是错误,但我似乎无法更新我的TABLE活动。

我找不到这些陈述的错误。这些值没有问题。

goal_id = Integer.parseInt(extras.getString("goalid"));
int i=0;
Activities act = new Activities(goal_id,activityname.getText().toString(),Integer.parseInt(days.getText().toString()),i,false);
dbhandler.updateActivty(act);

//更新活动

 public int updateActivty(Activities act) {
        SQLiteDatabase db = dbhandler.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(MyDBHandler.COLUMN_ACTIVITY_NAME, act.getActivityName());
        values.put(MyDBHandler.COLUMN_DAYS, act.getDays());
        values.put(MyDBHandler.COLUMN_NO_OF_TASKS, act.getNoOfTasks());
        values.put(MyDBHandler.COLUMN_COMPLETE, act.getComplete());

        // updating row
        return db.update(MyDBHandler.TABLE_ACTIVITIES, values, MyDBHandler.COLUMN_ID + " = ?",
                new String[] { String.valueOf(act.getId()) });
    }

2 个答案:

答案 0 :(得分:0)

永远不会调用updateActivty方法。使用事件总线将数据活动发送到活动。

答案 1 :(得分:0)

如果我是你,我会更多地工作并做以下事情:
通过搜索该id的值来尝试查看数据是否在数据库中:

while variable is 'yes':
   #continue or do something
   if someoccurances:
       variable = 'no'
       #break or call a function that elif does
#if break, Do your elif here!
if variable is 'no':
    #Do your function here!


下一个:
您可以创建一个可以随处访问的适配器:

   public static Cursor find(SQLiteDatabase db, String uid) {
     Tables table = Tables.YourTable;//it can be an enum or something static that contain/gives access to all of your columns. Hopefully it is clear.
     return db.query(table.getTableName(), 
     getColumnNames(table), 
     COLUMN_NAME_ID + " =?", 
     new String[]{uid}, null, null, null);
  }


你的行看起来像这样:

MyAdapter implements IMyAdapter
{
    @Override
    public boolean insert(IRow row){ 
        boolean success = false;
        synchronized (lock) {
            openIfDatabaseIsClosned();//here you get the writeable database and store it somewhere(I do it for multiple databases).
            try {
                row.insert(getDB());
                success = true;
            } catch (Exception e) {
                Log.e(TAG, "Error:" + e.getMessage(), e);
            }
        }
        return success;
    }

    @Override
    public boolean update(IRow row) {
        boolean success = false;
        synchronized (lock) {
            openDatabaseIfClosed();
            try {
                row.update(getDatabase());
                success = true;
            } catch (Exception e) {
                Log.e(TAG, "Your error message:" + e.getMessage(), e);
            }
        }
        return success;
    }
}


接下来你实现像

这样的东西
interface IRow
{
   void insert(SqliteDatabase db);
   void update(SqliteDatabase db);
   void delete(SqliteDatabase db);
   void find(SqliteDatabase db);
}

正如您所注意到的,在这种情况下,YourTable称为MyColumn并包含一些通常属于MyRow的列,以便在更新值时可以访问列。 基本上你只需要创建表格就完成了。 这对3-4个项目的工作/工作没有任何错误。
我更喜欢这种方式,因为传递字符串等很多事情都会出错。