我正在尝试更新联系人表格的星号字段,或者换句话说,我正在尝试在我的应用程序中添加一个名称到收藏列表。我搜索了很多,但找不到任何特定于我的案例.update查询只是没有做任何改变,甚至没有抛出异常,也不是堆栈跟踪中的东西。
//appname used in the code is the name which I need to add to the starred list..
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
ContentValues value=new ContentValues();
value.put("ContactsContract.Contacts.STARRED",1);
cur.moveToFirst();
while(!cur.isLast()){
String fetchname=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if((appname.equalsIgnoreCase(fetchname))==true)
{
String starredvalue=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.STARRED));
try
{
cr.update(ContactsContract.Contacts.CONTENT_URI,value,"starred=?",new String[]{starredvalue});
}
catch(Exception e)
{
e.printStackTrace();
}
}//if
cur.moveToNext();
}//while
答案 0 :(得分:1)
来自fine manual:
public int update (String表,ContentValues值,String whereClause,String [] whereArgs)
whereClause 更新时要应用的可选WHERE子句。传递null将更新所有行。
您的 whereClause 如下所示:
"starred='true'"
请注意,在该SQL片段中没有任何占位符(即col = ?
之类的内容)?但是您在 whereArgs 参数中为不存在的占位符提供参数:
new String[]{starredvalue}
所以update
调用正在寻找占位符第一,而不是在 whereClause 中找到它,然后你得到一个“索引超出范围”的异常。
我确定您要尝试做什么,但也许您希望 whereClause 为"starred = ?"
(而不是"starred='true'"
)或者{{1} } whereArgs 。