Android Contentprovider – обновление в методе вставки

Можно ли вызвать SQLiteDatabase обновления SQLiteDatabase в переопределенном методе insert() поставщика контента?

В принципе, все в порядке, но поскольку вы не предоставили код, я просто могу отправить 2 возможных способа для него

Первый:

 // In your content provider public Uri insert(...) { long insertId = db.insert(...); if(insertId == -1) { // insert failed, do update db.update(...); } } 

Во-вторых:

 public Uri insert(...) { long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE) if(insertId == -1) { // insert and update/replace failed } } 

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

Наиболее полезной задачей для insertWithOnConflict может быть то, что вы можете вставить строку и, если она уже существует, игнорировать вставку и вместо этого возвращать Uri / primary ключ уже существующей строки.

Это ваш выбор, что вы пишете в своих переопределенных методах. Так что да, все в порядке.

Я не знаю, что вы пытаетесь сделать, но вы можете также взглянуть на SQLiteDatabase replace() SQLiteDatabase . Возможно, это лучше соответствует вашим потребностям.