Как использовать предварительно заполненную базу данных SQLite с Expo на Android? - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь использовать предварительно заполненную базу данных SQLite для моего собственного приложения. Я использую Expo и функцию downloadAsync() для загрузки моей БД из папки с активами. Это работает, как и ожидалось, на IOS, так как я могу загрузить БД и получить данные.

На Android, однако я просто не могу заставить это работать. Файл db находится во внутреннем хранилище моего эмулятора, но каждый раз, когда я пытаюсь получить данные, возникает ошибка, поскольку «такой таблицы нет».

Я предполагаю, что SQLite неправильно выполняет поиск для моей базы данных, но вместо этого создает новую, где мои таблицы явно отсутствуют.

Я пытаюсь уже более 7 часов, поэтому я ценю любую помощь.

Структура папок :

App.js -assets --db ---db.db -src --connection ---connectionClass

Приложение. js

const App = () => {
    const [dbLoaded, setDbLoaded] = useState(false);   

    if(!dbLoaded){
        downloadDB().then((value) => setDbLoaded(value));
        return <></>
    } else {
        return (
            <Navigation/>
        );
    }
};

ConnectionClass. js

export const downloadDB = async () => {
    await FileSystem.deleteAsync(`${FileSystem.documentDirectory}SQLite`, {idempotent : true});
    await FileSystem.makeDirectoryAsync(`${FileSystem.documentDirectory}SQLite`, {intermediates: true });

    return await FileSystem.downloadAsync(
        Asset.fromModule(require('../../assets/db/WaKanji.db')).uri,
        `${FileSystem.documentDirectory}SQLite/WaKanji.db`
    ).then(({status}) => {
        if(status === 200){               
            return true
        }
        return false
    }).catch(error => {
        console.log('Err\n' + error);
        return false;
    });

};
...