0

コード:

    final String nome = nm.getText().toString();
            final String telefone = tlf.getText().toString();
            if(nome.length() != 0 && telefone.length() != 0){
                if(mIndex.equals("")) {                 
                    ContentValues valor = new ContentValues();
                    valor.put("nome", nome);
                    valor.put("telefone", telefone);
                    db.insert("contatos", null, valor);
                    ShowMessage("Sucesso","O Contato " + nome + " foi salvo com sucesso");
                }
                else {
                    String[] whereArgs = {"nome", "telefone"};

                    ContentValues dataToInsert = new ContentValues();                          
                    dataToInsert.put("nome", nome);
                    dataToInsert.put("telefone", telefone);

                    db.update("contatos", dataToInsert, "nome='"+nomeant+"' and telefone='"+foneant+"' ", whereArgs);
                    ShowMessage("Sucesso","O Contato " + nome + " foi editado com sucesso");
                }
            }

したがって、mIndex は前のアクティビティ (アイテム/連絡先を選択してクリックし、インデックスを新しいアクティビティに渡しました) の連絡先のインデックスです。 EditTexts には値があり、変更されると、Clicked Contacts の値 (名前/電話番号) が変更されます。しかし、SAVEボタンを押すとアプリがクラッシュしますが、エラーはdb.update行にあります。

db.update("contatos", dataToInsert, "nome='"+nomeant+"' and telefone='"+foneant+"' ", whereArgs);したがって、whereClauseまたはwhereArgsが間違っていると思いますが、Androidプログラミングの知能が高くないためです。

4

1 に答える 1

1

where 句自体に引数を追加しているため、ここでは whereArgs は必要ありません。whereArgs の代わりに null を指定するだけです -

 db.update("contatos", dataToInsert, "nome='"+nomeant+"' and telefone='"+foneant+"'", null);

ただし、常に引数を使用する方が適切です。SQL インジェクションを防ぎ、特殊文字のエスケープも処理します。あなたの場合 -

db.update("contatos", dataToInsert, "nome=? and telefone=?", whereArgs);

また、あなたの whereArgs が間違っています。そのはず -

String[] whereArgs = new String[] {nomeant, foneant};
于 2012-09-26T17:16:36.287 に答える