2011-09-20 4 views
0

J'ai un petit problème à obtenir les éléments dans ma base de données SQLite dans la base android.My ressemble à ceci:Comment obtenir les données de SQLite - Android

id/ serverName/objectId/objectOid/....//objectId is actually userId-which I need to compare 

Je reçois un données du serveur et je dois vérifier l'identifiant de l'utilisateur à partir du serveur et l'ID utilisateur local du database.I ont ce morceau de code:

public static Integer lUserIdByServerUserId(int serverUserId, String serverName){ 
    return localUserIdByServerUserId(serverUserId, serverName); 

} 

private static Integer localUserIdByServerUserId(int serverUserId, String serverName){ 
    DataBaseHelper dbHelper = new DataBaseHelper(context, "ops_sys_tpl.sqlite",null,1); 
    String query = "SELECT id FROM users WHERE objectId = "+serverUserId+" AND serverName = '"+serverName+"' LIMIT 1"; 
    ArrayList<String> result = new ArrayList<String>(); 
    cursor = dbHelper.executeSQLQuery(query); 
    cursor.moveToFirst(); 
    while(!cursor.isAfterLast()) { 
     result.add(cursor.getString(cursor.getColumnIndex("objectId"))); 
     cursor.moveToNext(); 
    } 

    Log.i("result ","Result : "+result.toString()); 
    Log.i("CURSOR ","Cursor Position : "+cursor.getPosition()); 
    Integer uuid = Integer.parseInt(result.get(cursor.getColumnIndex("objectId"))); 
    Log.w("localUSerByIdServerUserId","LocalUserByIdServerUserId result : "+uuid); 
    cursor.close(); 
    return uuid; 
} 

Je suis en train de vérifier toutes les entrées dans la base de données et s'il y a un match renvoyez-le.J'appelle cette méthode comme ceci:

  uuId = rpc.lUserIdByServerUserId(userId,newServerName); 

et je reçois cette exception à cette ligne: Integer uuid = Integer.parseInt(result.get(cursor.getColumnIndex("objectId")));

09-20 16:55:47.647: WARN/System.err(31031): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
09-20 16:55:47.647: WARN/System.err(31031):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) 
09-20 16:55:47.647: WARN/System.err(31031):  at java.util.ArrayList.get(ArrayList.java:311) 
09-20 16:55:47.647: WARN/System.err(31031):  at com.stampii.stampii.comm.rpc.RPCCommunicator.localUserIdByServerUserId(RPCCommunicator.java:1083) 
09-20 16:55:47.647: WARN/System.err(31031):  at com.stampii.stampii.comm.rpc.RPCCommunicator.lUserIdByServerUserId(RPCCommunicator.java:1066) 
09-20 16:55:47.657: WARN/System.err(31031):  at com.stampii.stampii.comm.rpc.InfoStartRPCPacket.executeBefore(InfoStartRPCPacket.java:176) 
09-20 16:55:47.657: WARN/System.err(31031):  at com.stampii.stampii.user.UserLogin$2$1.run(UserLogin.java:212) 
09-20 16:55:47.657: WARN/System.err(31031):  at java.lang.Thread.run(Thread.java:1102) 
09-20 16:55:47.657: WARN/ERROR(31031): Error - java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 

Et en fait je ne comporte qu'un seul test dans ma base de données qui est le même que le retour de l'ID utilisateur du serveur.

Des idées où est mon erreur et comment résoudre ce problème?

+0

quelle ligne est (RPCCommunicator.java:1083)? Marquez les lignes de code s'il vous plaît. –

+0

désolé oubliez de le mentionner. Je viens de mettre à jour ma question avec la ligne correcte qui est: Integer uuid = Integer.parseInt (result.get (cursor.getColumnIndex ("objectId"))); –

Répondre

1

problème était dû à la position du curseur

Essayez ce code pour positionner le curseur sur le point de départ.

if (mNotesCursor.moveToFirst()) { 
     do { 
     result.add(cursor.getString(cursor.getColumnIndex("objectId"))); 
     } while (mNotesCursor.moveToNext()); 
} 
+0

J'ai essayé, mais j'ai quand même eu l'exception. –

+0

Dans cette ligne: Integer uuid = Integer.parseInt (result.get (cursor.getColumnIndex ("objectId"))); –

+0

@Bombastic Mettez cette ligne dans la boucle do et try.My devinez, c'est qu'après avoir obtenu toutes les valeurs, le curseur arrive à la position finale. et maintenant si vous essayez d'obtenir de la valeur, il lève l'exception – Venky

Questions connexes