Как получить данные из sqlite - Android - PullRequest
0 голосов
/ 20 сентября 2011

У меня небольшая проблема с получением элементов в моей базе данных sqlite в android. Моя база данных выглядит так:

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

Я получаю данные с сервера, и мне нужно проверить идентификатор пользователя с сервера и локальный идентификатор пользователя из базы данных. У меня есть этот кусок кода:

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

Я пытаюсь проверить все записи в базе данных и, если есть совпадение, вернуть его. Я вызываю этот метод следующим образом:

            uuId = rpc.lUserIdByServerUserId(userId,newServerName);

и я получаю это исключение в этой строке: 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

И на самом деле у меня есть только одна тестовая запись в моей базе данных, которая совпадает с userID, возвращаемым с сервера.

Есть идеи, где моя ошибка и как это исправить?

1 Ответ

1 голос
/ 20 сентября 2011

Проблема возникла из-за положения курсора

Попробуйте этот код для позиционирования курсора в начальной точке.

 if (mNotesCursor.moveToFirst()) {
      do {
         result.add(cursor.getString(cursor.getColumnIndex("objectId")));
      } while (mNotesCursor.moveToNext());
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...