Как получить данные из курсора в Android? - PullRequest
4 голосов
/ 18 июня 2011

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

Cursor c = mDbHelper.fetchSpot(15);
        startManagingCursor(c);

        double lat = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LAT)));
        double lng = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LNG)));
        String name = c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_ADDRESS));

У меня есть другой метод с именем fecthAllSpots(), который возвращает много элементов в курсоре, какя могу получить каждый lng lat и имя из каждой строки в этом курсоре?

Ответы [ 2 ]

9 голосов
/ 18 июня 2011

Вы можете использовать цикл while для итерации всей строки, которую возвращает курсор.

while(c.moveToNext()){
    double lat = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LAT)));
    double lng = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LNG)));
    String name = c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_ADDRESS));
}

Конечно, вы должны что-то делать с переменными lat, lng и name, так как они будут переопределены на каждой итерации,Я предлагаю вам реализовать класс DBLocation, который может хранить имя, долготу и широту местоположения.Затем вы можете сохранить все созданные вами объекты из курсора в массиве или списке.

6 голосов
/ 18 июня 2011

Во-первых. Вы можете просто использовать методы getInt, getLong и т.д .. для курсора, чтобы получить значения, а не анализировать их потом.

Вопрос:

вот синтаксис:

сначала запросите базу данных, чтобы получить курсор.

Затем выполните нулевую проверку курсора (на всякий случай, потому что это иногда происходит), выполнимо также с блоком try catch.

следующая запись:

    if(c.moveToFirst()){
do{
// YOUR CODE FOR EACH CURSOR ITEM HERE.
// the cursor moves one field at a time trhough it's whole dataset
}while(c.moveToNext())
}

в конце закройте курсор или, если это управляемый запрос, ничего не делайте, действие закроет его для вас. Запомните все это в блоке, и кроме всего остального, что вы будете проверять, рассмотрите исключение nullPointerException для курсора.

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