2013-05-19 61 views
1

我正在開發一個小應用程序,用於保存地點及其所屬類別的記錄。現在,我只是在分類表上工作,一旦我設法執行所有CRUD操作,那麼我就會推進到應用程序的其餘部分。Android SQLite:未能更新記錄

問題是,我設法插入,刪除和讀取該表,但我無法更新。我有這樣的代碼:

將對DBAdapter:

... 
    public boolean updateCategory(long rowId, String name) { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_ID_CAT, rowId); 
     args.put(KEY_NAME_CAT, name); 
     return db.update(TABLE_CATEGORY, args, KEY_ROWID_CAT + "=" + rowId, null) > 0; 
    } 
... 

我EditCategory類:

public class S7_EditCategory extends Activity { 

    EditText et_name_category; 
    private Context ctx; 
    int duration = Toast.LENGTH_SHORT; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.s7_edit_categories); 

     et_name_category = (EditText) findViewById(R.id.edit_category); 
     ctx = this; 

     final String nome = getIntent().getStringExtra("nome"); 
     final long id_cat = getIntent().getIntExtra("_id", 0); 

     et_nome_category.setText(nome); 

     Button button_save = (Button) findViewById(R.id.button3); 

     button_save.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       try { 

        String new_cat = et_name_category.getText().toString(); 
        DBAdapter dbadap = DBAdapter.getInstance(ctx); 
        dbadap.updateCategory(id_cat, new_cat); 

        Intent i = new Intent(ctx, S5_Categories.class); 
        setResult(RESULT_OK, i); 
        finish(); 

        } 

        catch (Exception ex) { 

         throw new Error("some error"); 
        } 
       } 
      }); 

     } 
    } 

logcat的告訴我,(_id = 0),因此,我認爲它有用上一個活動傳遞的參數做,類別:

public class S5_Categories extends ListActivity { 

    private Context ctx; 
    private SimpleCursorAdapter adapter; 

    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.s5_categorias); 
     ctx = this; 

     fillList();   
     getListView().setOnItemClickListener(new OnItemClickListener() { 

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

       Cursor c = (Cursor) parentView.getItemAtPosition(position); 

       Intent i = new Intent(ctx, S7_EditCategoria.class); 
       i.putExtra("nome", c.getString(c.getColumnIndexOrThrow("nome"))); 
       i.putExtra("id_cat", c.getColumnIndex("_id") + 1); 
       startActivityForResult(i, 0); 

      } 
     }); 
    } 

    private void fillList() { 
     try { 

      DBAdapter dbadap = DBAdapter.getInstance(ctx); 
      Cursor c = dbadap.getAllCategorias(); 

      String[] from = new String[] { "nome" }; 
      int[] to = new int[] { android.R.id.text1 }; 

      adapter = new SimpleCursorAdapter(this, 
        android.R.layout.simple_list_item_1, c, from, to, 
        SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 

      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      setListAdapter(adapter); 
     } 

     catch (Exception ex) { 

      throw new Error(ex.getMessage()); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     super.onActivityResult(requestCode, resultCode, data); 

     switch(requestCode) { 

     case 0: 
      if (data != null) { 

       DBAdapter dbadap = DBAdapter.getInstance(ctx); 
       Cursor cursor = dbadap.getAllCategorias(); 
       adapter.changeCursor(cursor); 

      } 
     } 
    } 
} 

好吧,有人可以幫我嗎? 在此先感謝 Chiapa


好了,現在我設法獲取參數ID,但在更新時,我仍然得到錯誤:我嘗試,我得到這樣一個錯誤:

錯誤更新名稱=醫院id_cat = 4使用UPDATE類別SET name =?,id_cat =? WHERE ID = 4

請幫助

Chiapa

回答

1

請嘗試以下方法

db.update(TABLE_CATEGORY, args, KEY_ROWID_CAT + "=?", new String[] { (rowId) }); 

代替

db.update(TABLE_CATEGORY, args, KEY_ROWID_CAT + "=" + rowId, null) 

爲什麼你想把它當作一個int。他們是否有任何正當理由。我沒有從你提供的代碼中找到任何理由。如果他們沒有任何正當的理由意味着改變你的方法,如下所示。

public boolean updateCategory(long rowId, String name) { 
    ContentValues args = new ContentValues(); 
    args.put(KEY_ID_CAT, rowId); 
    args.put(KEY_NAME_CAT, name); 
    db.update(TABLE_CATEGORY, args, KEY_ROWID_CAT + "=?", new String[] { (rowId) }); 
} 

我希望這會幫助你。

+0

感謝您的回覆,但是, 它不會工作,因爲我的方法返回一個布爾值,那是一個int – chiapa

+0

不,我發現問題不是方法本身,而是我無法傳遞的參數將類分類到EditCategories類。我不知道爲什麼id沒有通過,因爲我可以通過類別的名稱。 我用id_cat變量的值做了吐司,它總是零,這就是爲什麼它不起作用。你能幫我嗎? – chiapa

+0

請清楚告訴我。我當然會幫你的。 – Gunaseelan