Я пытаюсь получить данные из локальной базы данных, используя UnityWebRequest
. На Windows это работает без проблем. На Android при первом запуске не удается найти базу данных, но если вы вернетесь к предыдущей сцене и снова загрузите эту сцену, то база данных будет создана и работает как надо.
Я поместил базу данных в папку StreamingAssets
( Я пробовал также прямо в Assets/
, но результат тот же ).
Вот что у меня есть:
private void Start()
{
//Check platform.
if (Application.platform == RuntimePlatform.Android)
{
platformPath = Application.persistentDataPath;
databasePath = Path.Combine("URI=file:" + platformPath + dbName);
}
else
{
platformPath = Application.dataPath;
databasePath = Path.Combine("URI=file:" + platformPath + "/StreamingAssets" + dbName);
}
if (!File.Exists(Path.Combine(platformPath + dbName)))
{
Debug.Log("File doesn't exists!");
StartCoroutine(GetText());
}
try
{
//Communicate with database.
IDbConnection dbConnection = new SqliteConnection(databasePath);
dbConnection.Open();
//Read and print data in DB table.
IDbCommand cmnd_read = dbConnection.CreateCommand();
IDataReader reader;
string query = "SELECT * FROM BonusWords";
cmnd_read.CommandText = query;
reader = cmnd_read.ExecuteReader();
while (reader.Read())
BonusWordsList.Add(reader[0].ToString().ToUpper());
//Close DB connection.
dbConnection.Close();
}
catch(Exception ex)
{
Debug.Log("EXCEPTION: " + ex);
}
}
private IEnumerator GetText()
{
string path = Path.Combine("jar:file://" + Application.dataPath + "!/assets" + dbName);
UnityWebRequest www = UnityWebRequest.Get(path);
yield return www.SendWebRequest();
while (!www.isDone) { }
try
{
// Retrieve results as binary data.
byte[] data = www.downloadHandler.data;
// Writes the DB in the persistent memory.
File.WriteAllBytes(Path.Combine(Application.persistentDataPath + dbName), data);
}
catch (Exception ex)
{
Debug.Log(ex.Message);
}
}
Так что проблема в том, что на Android при первом запуске база данных не может быть найдена, поэтому она создает ее после загрузки уровня. Как мне изменить его, чтобы всегда находить и загружать базу данных перед загрузкой остальной части сцены?