родной expo-реакции: есть ли способ просмотреть содержимое файловой системы expo, а также удалить ее оттуда? - PullRequest
2 голосов
/ 23 апреля 2020

есть способ просмотреть содержимое файловой системы, а также удалить содержимое оттуда?

у меня есть данные внутри файловой системы expo, и мне нужно:

  1. заглянуть внутрь FileSystem, потому что Я не знаю, как найти этот файл, потому что я работаю с клиентом expo SDK с помощью сканирования кода qr, и я не понимаю, как я могу найти этот файл там.
  2. Я хочу знать, как удалить содержимое из файла system.
  3. как мне увидеть базу данных sqlite в виде реальной таблицы?

это мой пример:

saveDbData = async () => {
    const { data, isLoaded } = this.state;
    for (let i = 0; i < data.length; i++) {
      const mediaData = data[i];
      const dbResult = await insertPlace(
        mediaData.artist,
        mediaData.image,
        mediaData.title,
        mediaData.url
      );
      console.log("SQL", `${FileSystem.documentDirectory}/SQLite/places.db`);
    }
    const fetchawesome = await fetchPlaces();
    console.log(fetchawesome)
  };

1 Ответ

1 голос
/ 28 апреля 2020

Поскольку с вашей стороны есть три вопроса, я постараюсь ответить на них один за другим и предоставить возможное решение.

заглянуть внутрь FileSystem, потому что я не знаю, как найти этот файл, потому что я работаю с клиентом expo sdk с помощью сканирования кода qr, и я не понимаю, как мне найти этот файл там.

Вы можете получить доступ к файловой системе, используя пакет FileSystem из expo. Вот как вы можете это сделать. Сначала импортируйте пакет.

import * as FileSystem from "expo-file-system";

Затем вы можете найти URI файла, подобного этому.

const { uri } = await FileSystem.getInfoAsync(
    `${FileSystem.documentDirectory}SQLite/${"yourDB.db"}`
  );

Я хочу знать, как удалить содержимое из файловая система.

Вы можете удалить файл, если у вас есть доступ к его местоположению или URI. Вот как вы можете удалить его. Он возвращает обещание.

FileSystem.deleteAsync(fileUri)

как мне увидеть базу данных SQLite как реальную таблицу?

Это сложная часть, потому что, поскольку вы используете свой android телефон для запуска приложения через expo, у вас не будет прямого доступа к вашему db. Одна вещь, которую вы можете сделать, это переместить db в другое место, где у вас есть доступ и использовать Sharing API из expo, чтобы сохранить или отправить db себе по электронной почте или любым другим способом.

 import * as Sharing from "expo-sharing"; 

 let documenturi = `${FileSystem.documentDirectory}/yourDB.db`;
  await FileSystem.copyAsync({
    from: uri,
    to: documenturi,
  });
  Sharing.shareAsync(documenturi);

Вы можете сделать это как функцию, которая срабатывает при нажатии Button, вы даже можете поместить это в useEffect или в методы жизненного цикла для запуска при загрузке экрана.

...