Android: обновить таблицу SQLite, используемую в другом приложении - PullRequest
0 голосов
/ 31 января 2019

Я написал приложение, которое сортирует плейлисты Poweramp, и оно работает нормально.Единственная проблема, с которой я сталкиваюсь - это производительность, и я думаю, это потому, что я вызываю getContentResolver().update в каждой строке.В идеале я хотел бы иметь возможность использовать транзакцию SQLite.applyBatch и bulkInsert не будут работать, так как мне нужно иметь предложение WHERE при каждом обновлении строки - мне по сути нужно обновить индексную таблицу, в которой есть несколько списков воспроизведения и их песен.

Fromчто я понимаю, я не смогу получить доступ к базе данных Poweramp напрямую через SQLite, так как я прочитал, что мне нужна такая же подпись приложения или что-то в этом роде?Может быть, кто-то может уточнить это.Похоже, что моя единственная надежда - переопределить метод applyBatch в ContentResolver или добавить свой собственный (из этой темы )?Хотя я не совсем уверен, как это переопределить ... код в этом потоке, похоже, уже каким-то образом переопределил класс.Я также не думаю, что он использует внешнюю БД.

Любые намеки на то, куда мне следует обратиться, или если уже есть ответ, это было бы отлично.

1 Ответ

0 голосов
/ 01 февраля 2019

То, что я в итоге делал, шло с ContentProviderOperation и getContentResolver().applyBatch (благодаря @MatPag, дающему совет, что это возможно) ... теперь это работает намного быстрее, и я не получаю сообщения ожиданиябольше.Ключевой частью applyBatch является то, что вы должны обернуть его в try..catch, что не очевидно из ошибки Android Studio, о которой он сообщает.Вот окончательный код:

Cursor songs = createPlaylistCursor(sort);
if (songs.moveToFirst()) {
    int i = 0;
    Uri playListUri = getPlaylistUri();
    ArrayList<ContentProviderOperation> cs = new ArrayList<ContentProviderOperation>();
    do {
        cs.add(ContentProviderOperation.newUpdate(playListUri)
          .withSelection("folder_file_id=" + songs.getInt(songs.getColumnIndexOrThrow("folder_files._id")), null)
          .withValue("sort", i++)
          .build());
    } while (songs.moveToNext());
    try {
        getContentResolver().applyBatch("com.maxmpz.audioplayer.data", cs);
    }
    catch (Exception e) {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...