Что происходит в моем приложении для Android, что приводит к потере данных? - PullRequest
0 голосов
/ 02 марта 2019

У меня есть приложение для 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;
}
...