2

場所とそれらが属するカテゴリの記録を保持する小さなアプリを開発しています。今のところ、私はカテゴリ テーブルに取り組んでいます。すべての CRUD 操作を実行できたら、アプリの残りの部分に進みます。

問題は、そのテーブルから挿入、削除、および読み取りを行うことができたが、更新できないことです。私はこのコードを持っています:

DBアダプタ:

...
    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 ) ということを教えてくれるので、前のアクティビティから渡されたパラメーター、Category と関係があると思います。

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);

            }
        }
    }
}

誰か助けてくれませんか?前もってありがとうチアパ


わかりました、なんとかそのパラメーターIDを取得できましたが、更新時にまだエラーが発生します:試してみると、次のようなエラーが発生します:

UPDATE カテゴリ SET name=?, id_cat=? を使用して name=hospitals id_cat=4 を更新中にエラーが発生しました どこID=4

助けてください

チアパ

4

1 に答える 1

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) });
}

これがお役に立てば幸いです。

于 2013-05-19T11:43:45.067 に答える