Проблема с хранением адреса на карте в arraylist - PullRequest
0 голосов
/ 06 апреля 2019

Я работаю над проектом карт Google. Пользователи могут добавлять местоположение и просматривать их в виде сетки. Когда я запускаю свое приложение для просмотра всех местоположений из базы данных, все индексы успешно извлекаются из базы данных и выдвигаются arraylist. Но когда я пытаюсь чтобы добавить местоположение. Для всех предыдущих местоположений снова добавляется база данных, затем в мое желаемое местоположение добавляется конец массива. Поэтому, когда я пытаюсь достичь желаемого местоположения из сетки, оно показывает мне первое местоположение. Я хочу, чтобы это повторилось только один раз. Я думаю, есть проблема в моем запросе выбора. Вот результат вывода. Результат

    GridView gridView= (GridView) findViewById(R.id.gridView);
    list = new ArrayList<>();
    try {

        MapsActivity.database = this.openOrCreateDatabase("Places",MODE_PRIVATE,null);
        Cursor cursor = MapsActivity.database.rawQuery("SELECT * FROM places",null);
        int nameIx = cursor.getColumnIndex("name");
        int latitudeIx = cursor.getColumnIndex("latitude");
        int longitudeIx = cursor.getColumnIndex("longitude");
        while (cursor.moveToNext()) {
                nameFromDatabase = cursor.getString(nameIx);
                String latitudeFromDatabase = cursor.getString(latitudeIx);
                String longitudeFromDatabase = cursor.getString(longitudeIx);
                image = cursor.getBlob(3);
                // names.add(nameFromDatabase);
                Double l1 = Double.parseDouble(latitudeFromDatabase);
                Double l2 = Double.parseDouble(longitudeFromDatabase);
                //   System.out.println("coordinates:"+l1+","+l2);
                locationFromDatabase = new LatLng(l1, l2);
                names.add(nameFromDatabase);
                locations.add(locationFromDatabase);
                list.add(new Location(nameFromDatabase, image));

            }

        cursor.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    adapter = new LocationListAdapter(this, R.layout.location_items, list);
    gridView.setAdapter(adapter);

1 Ответ

0 голосов
/ 07 апреля 2019

Я подозреваю, что ваша проблема в том, что при добавлении нового местоположения вы снова получаете все местоположения из карт Google.

  • В ваш код не входит код для добавления местоположения.

Однако вы можете предотвратить дублирование данных, определив соответствующие ограничения UNIQUE для вашей Places базы данных.

Например, основываясь на вашем коде, вы можете СОЗДАТЬ таблицу, используя: -

        CREATE TABLE IF NOT EXISTS places (name TEXT UNIQUE ON CONFLICT IGNORE,longitude REAL,latitude REAL,image BLOB, UNIQUE (longitude,latitude) ON CONFLICT IGNORE)

Использование name TEXT UNIQUE ON CONFLICT IGNORE добавит ограничение / правило / ограничение, что имя должно быть уникальным, и если будет предпринята попытка использовать имя, которое уже существует (вставьте или обновите), тогда эта попытка будет игнорироваться (ошибка не возникает).

Использование UNIQUE (longitude,latitude) ON CONFLICT IGNORE делает то же самое НО для комбинации ОБА столбцов.

например, если строка в таблицеимеет широту 1 и долготу 1, то: -

  • попытка добавить строку с широтой 1 и долготой 1 приведет к игнорированию попытки.

  • попытка добавить строку сширота 2 и долгота 1 будут работать, так как комбинация двух значений не использовалась.

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