代码:
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已经是BLANK,它将添加一个新的联系人,如果EditTexts有一个值并被更改,它将改变Clicked Contacts值(名称/电话)。但是,当我点击按钮SAVE时,它会崩溃我的应用程序,但错误位于db.update
行。
db.update("contatos", dataToInsert, "nome='"+nomeant+"' and telefone='"+foneant+"' ", whereArgs);
因此我认为whereClause或whereArgs是错误的,但因为我在Android编程中没有高智商。
答案 0 :(得分:1)
您不需要whereArgs,因为您在where子句中附加了参数。只需提供null代替whereArgs -
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};