首页 > 解决方案 > Unity项目在Android设备中找不到正确的数据库路径

问题描述

我有一个 Unity 项目,可以在统一编辑器中正常工作,但是当我在 Android 设备上运行该应用程序时,就会出现问题。

问题是应用程序无法在代码中的数据路径中找到数据库因此,它在此目标中创建了一个具有相同名称的文件,并且该文件为空。因此,在任何需要数据库数据的方法中,都会出现错误(找不到表)

我将数据库放在资产文件夹中

这是检测路径的代码。

我首先尝试了这部分:

testconnectionString = Application.dataPath + "/ARMaze.sqlite";

然后是大厅代码。然后是没有注释部分的代码。而且我每次都有问题。

void Start()
{
    if (Application.platform != RuntimePlatform.Android)
    {
        testconnectionString = Application.dataPath + "/ARMaze.sqlite";
    }
    else
    {
        testconnectionString = Application.persistentDataPath + "/ARMaze.sqlite";

        //if (!File.Exists(testconnectionString))
        //{
        //    WWW load = new WWW("jar:file://" + Application.dataPath + "!/assets" + "/ARMaze.sqlite");
        //    while (!load.isDone) { }

        //    File.WriteAllBytes(testconnectionString, load.bytes);
        //}
    }
       
    connectionString = "URI=file:" + testconnectionString ;
    Debug.Log("Connection String is "+connectionString);
}

标签: c#sqliteunity3d

解决方案


通常,对于系统路径,您不会直接连接字符串,而是使用Path.Combine

if (Application.platform != RuntimePlatform.Android)
{
    testconnectionString = Path.Combine(Application.dataPath, "ARMaze.sqlite");
}
else
{
    testconnectionString = Path.Combine(Application.persistentDataPath, "ARMaze.sqlite");
    ...

它会自动为目标平台使用正确的路径分隔符(\/)。

我可能错了,但我认为!在系统路径中也可能会造成麻烦。为什么还要在!/assets这里加一个?不应该和以前一样testconnectionString吗?


推荐阅读