Контент-провайдер - обновление всех строк и столбцов - PullRequest
0 голосов
/ 01 мая 2018

У меня есть массив ContentValues ​​[] с именем cv, который входит в мою базу данных SQLite. Для простоты в моей базе данных есть 3 столбца (идентификатор автоинкрементации для каждой строки, дня и влажности). База данных состоит из 3 строк. Вот пример данных, добавленных в одну строку.

ContentValues cv = new ContentValues();
        cv.put(WeatherContract.WeatherData.COLUMN_DAY_OF_WEEK, day);
        cv.put(WeatherContract.WeatherData.COLUMN_HUMIDITY, humidity);

Это повторяется 3 раза, и каждый ContentValue помещается в мой массив ContentValue, прежде чем в мою базу данных будет выполнена массовая вставка.

У меня есть задание, которое каждые пять минут получает новые данные с сервера. Поэтому мне нужны эти новые данные, чтобы заменить старые, и у меня возникли проблемы с синтаксисом. Я дошел до того, что у меня ContentValues ​​[] jsonResults с новыми данными, а затем я немного запутался. Как я могу обновить ВСЕ строки в моей таблице? Нужно ли перебирать метод обновления contentResolvers:

for (int i =0; i<jsonResults.length;i++){
            context.getContentResolver().update(weatherQueryUri,jsonResults[i],null,null);
        }

Если так, что я помещаю в свои предложения where и selectionArgs вместо null? Или я оставлю это значение пустым?

После прохождения ContentProvider, вот мой метод базы данных для фактической вставки:

  public void updateRow(ContentValues weatherValue,String where, String selection){
        mDb.update(WeatherContract.WeatherData.TABLE_NAME,weatherValue,null,null);
}

Спасибо!

1 Ответ

0 голосов
/ 01 мая 2018

Ну, я не уверен, что мое решение работает хорошо, но вы можете попробовать его. Чтобы заменить старые данные новыми, я сначала должен выполнить delete (), а затем bulkInsert () для вашего объекта ContentResolver. Таким образом, вам не нужно зацикливаться на jsonResults.

  if (jsonResults != null && jsonResults.length != 0) {
                /* Get a ContentResolver object to help delete and insert data */
                ContentResolver contentResolver = context.getContentResolver();

                /* Delete old data */
                contentResolver.delete(weatherQueryUri,null,null);

                /* Insert our new data into contentResolver */
                contentResolver.bulkInsert(weatherQueryUri, jsonResults);
            }
...