0

そのため、ヘルパー クラスを介してアプリを最初に開いたときにビルドされるアプリにデータベースがあり、追加できます (dbfavoritosHelper.insert(favId, favName, favType);ourCursor.requery();Toast. makeText(getApplicationContext(),"El medio a sido a tus favorites!" Agrefav ボタン内,)) 問題なくそこからアイテムを削除しますが、私が達成したいのは、追加ボタンを押して確認する瞬間です同じ favId を持つアイテムが既に存在するため、重複を作成したくないので追加したくないので、そのアイテムを更新したいのですが、これまでのところ、私が持っているコードはここでは機能していませんは:

私の主な活動で

//this is how I call insert
 Button Agrefav = (Button) findViewById(R.id.btnFav);
            Agrefav.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                if(arrayOfWebData.isEmpty()){
                    Toast.makeText(getApplicationContext(),
                            "No hay medio para agregar a favoritos!",
                            Toast.LENGTH_LONG).show();
                }else{
                    if(!dbfavoritosHelper.find(favId)){
                         dbfavoritosHelper.insert(favId, favName, favType);
                    ourCursor.requery();
Toast.makeText(getApplicationContext(),
                                "El medio a sido a tus favoritos!",
                                Toast.LENGTH_LONG).show();
                    }else{
                        dbfavoritosHelper.update(favId, favId, favName, favType);
                        ourCursor.requery();
                        Toast.makeText(getApplicationContext(),
                                "El medio se a actualizado en tus favoritos!",
                                Toast.LENGTH_LONG).show();
                    }
                }
            }});


//this is how I call delete
dbfavoritosHelper.delete(delId);
                     delId=null;
                     ourCursor.requery();

私のヘルパーで:

 //this is how I insert items to table
 public void insert(String mId, String mName, String mType) {
    ContentValues cv=new ContentValues();
    cv.put("medioId", mId);
    cv.put("medioName", mName);
    cv.put("medioType", mType);

    getWritableDatabase().insert("favorito", null, cv);

}

//this is how I'm trying to find if an item already exists in db, but not working
public boolean find(String mId){
    try {
    getReadableDatabase().rawQuery("SELECT * FROM favorito WHERE favorito.medioId='"+mId+"';", null);

    return true;        
    } catch (SQLException sqle){
    return false;   
    }
}

//this is how I update items
public void update(String id, String mId, String mName, String mType){
    ContentValues cv=new ContentValues();
    String[] args={id};
    cv.put("medioId", mId);
    cv.put("medioName", mName);
    cv.put("medioType", mType);
    getWritableDatabase().update("favorito", cv, "_id=?", args);
}

//this is how I delete them
public void delete(String id){
    getWritableDatabase().delete("favorito", "_id=?", new String[] {id});
}

任意の推奨事項を歓迎します, ありがとう

4

2 に答える 2

1

テーブルにチェックを入れることもできます。SQLite での例を次に示します。

create table foo (
  name text unique);

insert into foo (name) values ("Pablo");
insert into foo (name) values ("Pablo"); // Doesn't add row!

したがって、挿入関数を少し変更して、制約例外をキャッチし、true/false を返すようにすると、次のようになります。

public boolean insert(String mId, String mName, String mType) {
    ContentValues cv = new ContentValues();
    cv.put("medioId", mId);
    cv.put("medioName", mName);
    cv.put("medioType", mType);

    try {
        getWritableDatabase().insertOrThrow("favorito", null, cv);
        return true; // Won't be executed if an error is thrown
    }
    catch(SQLiteConstraintException e) {
        return false; 
    }
}
于 2012-04-29T23:57:23.057 に答える
0

私の解決策はに変更することでした

public boolean find(String mId){    
    Cursor c = getReadableDatabase().rawQuery("SELECT * FROM favorito WHERE favorito.medioId='"+mId+"';", null);
    if (c.moveToFirst())
    { return true; }else{
    return false;}
}
于 2012-04-29T23:44:18.283 に答える