У меня есть приложение для Android.У меня есть несколько пользователей, у которых периодически возникают проблемы: когда приложение закрывается, все сохраненные файлы исчезают.Каждая созданная папка исчезла.Все полностью уничтожено.
Я тщательно сохраняю игровые данные при каждом переходе и игровом событии, поэтому я очень уверен, что это не тот случай, когда пользователь выйдет из строя до того, как данные будут записаны.Каким-то образом данные, которые пишутся, но потом просто не сохраняются после удаления приложения из памяти.
Итак, кто-нибудь сталкивался с такой ситуацией и решил ее?Единственное, что я могу себе представить, это то, что есть какая-то команда «filesystem.commit», которую мне нужно вызывать после записи файлов, но я не могу найти это нигде в документации.
Пожалуйста, помогите!
(Правка) Я использую нативный код для чтения и записи файлов.Код, который я использую для записи файла, таков:
bool WriteFile(char *theFilename, char *theDataPtr, int theLen)
{
FILE* aFile=fopen(theFilename,"w+");
if(!aFile) {Alert("unable to create file %s with error %d", theFilename, errno);return false;}
if(aFile) fclose(aFile);
aFile=fopen(theFilename,"w+b");
if(!aFile) {Alert ("unable to open file %s", theFilename);return false;}
if (aFile)
{
fwrite(theDataPtr, 1, theLen,aFile);
fclose(aFile);
return true;
}
return false;
}
Примечание. Ни один клиент не сообщает о каких-либо всплывающих окнах с предупреждениями, которые являются обычными окнами сообщений Android.Также обратите внимание, что этот код работает практически во всех других системах - есть лишь несколько клиентов, которые получают стертые данные, поэтому мне было интересно, если это какая-то странная защита или какой-то дополнительный шаг, который мне нужно сделать, чтобы быть на 100% совместимым со всеми системами.
(Правка) Еще одна информация ... это код Java, который я использую для получения пути к хранилищу приложения ... все файлы, которые я пытаюсь записать, помещаются в эту папку.
private void SetFilePath()
{
String storagePath = getFilesDir().getAbsolutePath();
// SDCARD
try {
String storageState = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(storageState))
storagePath = getExternalFilesDir(null).getAbsolutePath();
} catch (Exception e) {
Log.v(IDS.LOG,
"No permission to access external storage, missing android.permission.WRITE_EXTERNAL_STORAGE");
}
SetFilePathNative(storagePath); // Tells the native code the path
mStorageDir = storagePath;
}