Android 11 Невозможно открыть файл SQLite после команды обновления, пока устройство не будет перезагруженоAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android 11 Невозможно открыть файл SQLite после команды обновления, пока устройство не будет перезагружено

Сообщение Anonymous »

У меня есть портативный RFID-считыватель на базе Android 11. Для инвентаризации я копирую файл SQLite на устройство в рабочий каталог папки внутреннего хранилища с помощью MTP с компьютера под управлением Windows.
Мое приложение — .Net, написанное на Xamarin.Forms и скомпилированное с помощью Android 11 SDK.
Когда считыватель RFID находит элементы, перечисленные в инвентаре SQLite, он обновляет данные с указанием даты и времени, в которых находится элемент.
Это приложение работало на всех устройствах предыдущих версий Android без проблема.
На этом устройстве файл SQLite случайно «блокируется» во время работы.
Когда я вызываю Open(), я получаю ошибку SQLite 14: Cannot Open, это состояние сохраняется после закрытия приложения и устраняется только перезагрузкой устройства. Я использую слово «заблокировано» для описания поведения, поскольку нет дальнейших указаний на то, почему файл не может быть открыт.
Я проверял права доступа к файлу, пока файл находился в «заблокированном» состоянии, и смог без ошибок вызвать Sytem.IO.File.OpenRead().
Единственное решение «заблокированного файла» — полная перезагрузка устройства.
Изменение с sqlite-net-pcl nuget в Microsoft.Data.Sqlite не повлияло на такое поведение.
Пытаясь решить эту проблему, я включил режим «WAL», который, казалось, решил проблему, но только уменьшил частоту возникновения «блокировки».
Заранее благодарен за любые предложения.
Как предложил Эндрю, код указан ниже.
Дополнительное редактирование описания, предложенное Сергеем.
/>public DateTime? SetDateLocated(InventoryItem item)
{
DateTime? returnValue = null;
using (var fileConn = DB())
{
try
{
item.DateLocated = DateTime.Now;
var l_DateLocated = item.DateLocated.Value.ToString("yyyy-MM-dd HH:mm:ss");
var query = new SqliteCommand($"UPDATE EvidenceData SET DateLocated = '{l_DateLocated}', RawEpc = '{item.RawEpc}', Health = '{item.Health}' WHERE GUID = '{item.GUID}'", fileConn);
fileConn.Open();
var result = query.ExecuteNonQuery();

returnValue = item.DateLocated;

}
catch (Exception ex)
{
App.WriteException(ex);
return null;
}
finally
{
fileConn.Close();
}
return returnValue;
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... s-rebooted
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»