2017-02-06 3 views
1

Я пытаюсь получить номер телефона в BroadCastReceiver из базы данных, но это дает мне пустое значение. База данных содержит 50 записей. Я пытаюсь сделать что-то вроде
SELECT PHONE_NUMBER FROM TABLE WHERE ID =? и возвращается к результату в телефоне.Sqlite возвращает значение null

public String getPhone(String req){ 
    SQLiteDatabase sqLite=appalaHelper.getWritableDatabase(); 
    String phone=null; 
    String[] columns={appalaHelper.PHONE_NUMBER}; 
    String selection=appalaHelper.UID+"=? "; 
    String[] selectionArgs={req}; 
    Cursor cursor=sqLite.query(AppalaHelper.TABLE,columns,selection,selectionArgs,null,null,null); 
    cursor.moveToFirst(); 
    while (cursor.moveToNext()){ 
     phone=cursor.getString(cursor.getColumnIndex(appalaHelper.PHONE_NUMBER)); 
    } 
    return phone; 

}

BroadcastReceiver

appleHelperAdapter=new AppalaHelperAdapter(context); 
    String requestCode=intent.getExtras().getString("de"); 
    meeSender=appleHelperAdapter.getPhone(requestCode); 
// Here I am getting null value instead of phone number 
    Toast.makeText(context, meeSender, Toast.LENGTH_LONG).show(); 
    appleHelperAdapter.Delete(requestCode); 

ответ

1
cursor.moveToFirst(); 
while (cursor.moveToNext()){ 

В moveToFirst() движется к первой возвращаемой строки.
moveToNext() затем пытается перейти ко второй возвращенной строке, которой не существует.

Распространено использовать цикл do/while так что moveToNext() вызов происходит после тело цикла, но курсор изначально позиционируется перед первой строкой, так что вы можете просто использовать:

Cursor cursor = sqLite.query(...); 
while (cursor.moveToNext()) { 
    phone = cursor.getString(cursor.getColumnIndex(appalaHelper.PHONE_NUMBER)); 
} 

Но когда вы хотите прочитать только одно значение, лучше использовать более простой helper function:

public String getPhone(String req) { 
    SQLiteDatabase db = appalaHelper.getWritableDatabase(); 
    return DatabaseUtils.stringForQuery(db, 
       "SELECT "+appalaHelper.PHONE_NUMBER+ 
       " FROM "+AppalaHelper.TABLE+ 
       " WHERE "+appalaHelper.UID+" = ?", 
       new String[]{ req }); 
} 
+0

Да !! Cool спасибо брату. Я удалил cursor.moveToFirst(), и он работал как шарм;) Не могли бы вы рассказать мне, где я могу найти хорошую документацию по базе данных sqlite для Android? Ваши коды мощные! –

0

Поскольку вы используете moveToFirst() и перед проверкой значения телефона moveToNext() (во время цикла) ваш код пропускает первую запись. Если ваш SELECT возвращает только одну строку, ваш результат будет выглядеть NULL.

Рассмотрите возможность использования cursor.getCount() в этих обстоятельствах.

Я хотел бы также указать, что если вы планируете цикл через курсор, вам следует присваивать значения массиву вместо того, что вы делаете. Все зависит от того, относится ли ваш код к нескольким телефонным номерам в качестве ответа (вне сферы действия этой публикации).

public String[] getPhone(String req){ 
    SQLiteDatabase sqLite=appalaHelper.getWritableDatabase(); 
    String[] phone; 
    String[] columns={appalaHelper.PHONE_NUMBER}; 
    String selection=appalaHelper.UID+"=? "; 
    String[] selectionArgs={req}; 
    Cursor cursor=sqLite.query(AppalaHelper.TABLE,columns,selection,selectionArgs,null,null,null); 
    int counter = 0; 
    while (cursor.moveToNext()){ 
     phone[counter]=cursor.getString(cursor.getColumnIndex(appalaHelper.PHONE_NUMBER)); 
    } 
    return phone[]; 
} 

ИЛИ

public String getPhone(String req){ 
    SQLiteDatabase sqLite=appalaHelper.getWritableDatabase(); 
    String phone = null; 
    String[] columns={appalaHelper.PHONE_NUMBER}; 
    String selection=appalaHelper.UID+"=? "; 
    String[] selectionArgs={req}; 
    Cursor cursor=sqLite.query(AppalaHelper.TABLE,columns,selection,selectionArgs,null,null,null); 
    If (cursor.getCount()>0){ 
     cursor.moveToFirst(); 
     phone=cursor.getString(cursor.getColumnIndex(appalaHelper.PHONE_NUMBER)); 
    } 
    return phone; 
} 
+1

Спасибо, Тони, я получил ответ от CL, он дал мне понять курсор.moveToFirst() и cursor.moveToNext(). И вы дали мне понять, как это работает, и дали мне пример использования cursor.moveToFirst() в этой ситуации, используя cursor.getCount()> 0 спасибо за тонну за ваши ответы !! У меня только 1 репутация иначе, я проголосую за ваш ответ! :) –

Смежные вопросы