c# - 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);
}
解决方案
通常,对于系统路径,您不会直接连接字符串,而是使用Path.Combine
if (Application.platform != RuntimePlatform.Android)
{
testconnectionString = Path.Combine(Application.dataPath, "ARMaze.sqlite");
}
else
{
testconnectionString = Path.Combine(Application.persistentDataPath, "ARMaze.sqlite");
...
它会自动为目标平台使用正确的路径分隔符(\
或/
)。
我可能错了,但我认为!
在系统路径中也可能会造成麻烦。为什么还要在!/assets
这里加一个?不应该和以前一样testconnectionString
吗?
推荐阅读
- firebase - 使用 Firebase signInWithRedirect 我可以将其配置为将我重定向回特定页面
- c - 在 system() 调用中转义 " 以在 echo 命令中使用
- python - PyTest:自动删除使用 tmpdir_factory 创建的临时目录
- web - 在 python 中用漂亮的汤刮网页
- sql - SQL - 计算产品的累积平均成本价
- java - java.lang.NullPointerException at impl.org.controlsfx.skin.PopOverSkin.lambda$new$68(PopOverSkin.java:255)
- google-cloud-platform - Python Bigtable 客户端在 deepcopy 上花费了很多时间
- javascript - Mongodb shell 4.0.0 未在 Linux mint 18 上安装
- android - onPageFinished() 有时不会被调用
- vue.js - v-for 渲染具有多个 tr 的 html 表