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 已经为空白,它将添加一个新联系人,如果EditTexts 有一个值并且得到改变它将改变 Clicked Contacts 值(姓名/电话)。但是当我点击按钮 SAVE 时,它会导致我的应用程序崩溃,但错误就在其中db.update

db.update("contatos", dataToInsert, "nome='"+nomeant+"' and telefone='"+foneant+"' ", whereArgs);所以因此我猜 whereClause 或 whereArgs 是错误的,但因为我在 Android 编程中没有很高的智能。

4

1 回答 1

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};
于 2012-09-26T17:16:36.287 回答