невозможно выполнить запрос на обновление в базе данных в Android? - PullRequest
3 голосов
/ 29 ноября 2011

Я пытаюсь обновить помеченное поле таблицы контактов или, другими словами, я пытаюсь добавить имя в список избранных в моем приложении. Я много искал, но не смог найти ничего конкретного для моего запроса .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

1 Ответ

1 голос
/ 29 ноября 2011

Из тонкой инструкции :

public int update (таблица строк, значения ContentValues, String whereClause, String [] whereArgs)

whereClause необязательное предложение WHERE, применяемое при обновлении. Передача null обновит все строки.

Ваш , где Claus выглядит так:

"starred='true'"

Заметили, что в этом фрагменте SQL у вас нет заполнителей (например, col = ?)? Но вы предоставляете аргументы для несуществующих заполнителей в вашем аргументе whereArgs :

new String[]{starredvalue}

Таким образом, вызов update ищет заполнитель номер один, а не находит его в whereClause , а затем вы получаете исключение «индекс вне диапазона».

Я уверен, что вы пытаетесь сделать, но, возможно, вы хотите, чтобы ваш whereClause был "starred = ?" (вместо "starred='true'") или, возможно, null , где Args .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...