2017-02-06 1 views
1

Ich versuche, die Telefonnummer in BroadCastReceiver aus der Datenbank zu bekommen, aber es gibt mir leere Wert. Datenbank hat 50 Einträge. Ich versuche, etwas zu tun wie
SELECT PHONE_NUMBER FROM TABLE WHERE ID =? und zurück zum Ergebnis im Telefon.Sqlite gibt Nullwert

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); 

Antwort

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

Die moveToFirst() bewegt sich in die erste zurückgegebene Zeile.
Die moveToNext() versucht dann, in die zweite zurückgegebene Zeile zu verschieben, die nicht vorhanden ist.

Es ist üblich, eine do/while Schleife zu verwenden, so dass der moveToNext() Anruf nach der Schleife passiert, aber die Cursor anfänglich vor der ersten Zeile angeordnet ist, so kann man einfach verwenden:

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

Aber wenn man nur einen einzigen Wert lesen möchten, verwenden Sie besser eine einfachere 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

Yeah !! Cool danke bro .. Ich entfernte cursor.moveToFirst() und es funktionierte wie ein Charme;) Können Sie mir bitte sagen, wo kann ich gute Dokumentation auf SQLite-Datenbank für Android finden? Deine Codes sind mächtig !! –

0

Weil Sie 01 verwendenund VOR dem Überprüfen Telefon Wert moveToNext() (in While-Schleife), überspringt Ihr Code den ersten Datensatz. Falls Ihr SELECT nur eine Zeile zurückgibt, wird Ihr Ergebnis NULL erscheinen.

Verwenden Sie unter diesen Umständen cursor.getCount().

Ich möchte weiterhin darauf hinweisen, dass wenn Sie planen, durch den Cursor zu durchlaufen, sollten Sie Werte einem Array statt was Sie tun, zuordnen. Alles hängt davon ab, ob Ihr Code mehrere Telefonnummern als Antwort behandelt (über den Umfang dieses Posts hinaus).

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[]; 
} 

ODER

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

Danke Tony, ich habe bereits die Antwort von CL, er machte mich klar auf cursor.moveToFirst() und cursor.moveToNext(). Und Sie haben mir klar gemacht, wie es funktioniert, und mir ein Beispiel gegeben, wie Sie cursor.moveToFirst() in dieser Situation verwenden können, indem Sie cursor.getCount()> 0 verwenden, danke für Ihre Antworten! Ich habe sonst nur 1 Ruf, ich werde deine Antwort abstimmen! :) –

Verwandte Themen