Получить данные из базы данных SQLite для намерения через «onItemClick» на элемент в ListView Android - PullRequest
3 голосов
/ 27 ноября 2011

Мне очень нужна ваша помощь.

У меня есть база данных с данными о широте и долготе, вот пример:

id_ _ __ _ имя _ ____ * 1018 лат * _ __ _ ____ _long

1_ _ ___ hotel one _ __ 6.1234 _ __ _ __ -106.12345

2_ _ __ Отель два _ ___ 6.54321 _ __ _ _ -107.23456

3_ _ _ Отель три _ __ 7.12345 _ __ _ _ -106.98765

Отображение данных в ListView на Android.И я использую onItemClick, поэтому, если я щелкну один из элементов в ListView, он перейдет к

Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&saddr=&daddr="+lat_var+","+long_var))

Но проблема в том, если я щелкну один из элементов в ListView, данные вlat_var и long_var по указанным выше намерениям не дадут мне широту и долготу данных из моей базы данных ...

Здесь мой код, вы можете отредактировать его, поэтому, если я щелкну по одному из элементов в ListView, он выдастмне последние и длинные данные из моей базы данных.Например, если я нажму hotel 2, значение lat_var изменится на 6.54321, а long_var изменится на -107.23456 с этим намерением.

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            SQLiteDatabase dbs = dbHotelHelper.getReadableDatabase();

            String get_lat = "SELECT lat FROM hoteltbl";
            Cursor result_lat = dbs.rawQuery(get_lat, null);
            double lat_var = result_lat.getColumnIndex("lat");
            String get_long = "SELECT lat FROM hoteltbl";
            Cursor result_long = dbs.rawQuery(get_long, null);
            double long_var = result_long.getColumnIndex("long");

            Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&saddr=&daddr="+lat_var+","+long_var));
            startActivity(intent);

        }

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

1 Ответ

4 голосов
/ 27 ноября 2011

Во-первых, необходим только один запрос.Нет необходимости запрашивать вашу таблицу дважды.Во-вторых, вам нужно адаптировать ваш запрос с параметрами из вашего выбора:

@Override
protected void onListItemClick(ListView listView, View view, int position, long id) {id) {    
    String selectedItem = (String) getListAdapter().getItem(position);
    String query = "SELECT lat, long FROM hoteltbl WHERE name = '" + selectedItem + "'";
    SQLiteDatabase dbs = dbHotelHelper.getReadableDatabase();
    Cursor result = dbs.rawQuery(query, null);
    result.moveToFirst();

    double lat = result.getDouble(result.getColumnIndex("lat"));
    double long = result.getDouble(result.getColumnIndex("long"));

    ....

Этот код был написан в редакторе StackOverflow, он может не работать как таковой, но даст вам представление.

(Кроме того, не добавляйте суффиксы "_var" или "_long" к своим переменным, это не обязательно в строго типизированном языке, таком как Java)

...