当前位置: 首页 > 知识库问答 >
问题:

Android target中的Haxe-SQLLite崩溃

郭浩穰
2023-03-14

我正在做的事情:

>

  • 使用数据库浏览器创建数据库并将其保存到资产/data/db/data.db

    然后,当应用程序启动时,我将其复制到Lime.System.System.ApplicationStorageDirectory

    <android target-sdk-version="26" install-location="preferExternal" if="android" />
    <android permission="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <android permission="android.permission.WRITE_INTERNAL_STORAGE"/>
    
    <haxelib name="openfl" />
    <haxelib name="hxcpp" />
    
    <assets path="assets/data/db" rename="db" />
    
    package;
    import haxe.io.Bytes;
    import lime.Assets;
    import openfl.system.System;
    import sys.FileSystem;
    import sys.db.Connection;
    import sys.db.Sqlite;
    import sys.io.File;
    
    #if android
        // Make SQLite work on android by statically compiling the library
        import hxcpp.StaticSqlite;
    #end
    
    /**
     * ...
     * @author Sim
     */
    class DBManager
    {
        private var CLONE:String = "db/asset_database.db";
        private var NEW:String = "new_db.db";
    
        private var _conn:Connection = null;
    
        public function new()
        {
        }
    
        public function openDatabase():Void
        {
            trace("CREATING FILE");
    
            trace("targetPath: " +lime.system.System.applicationStorageDirectory);
            //trace("targetPath: " +lime.system.System.applicationDirectory); //Crashing the app
            trace("targetPath: " +lime.system.System.documentsDirectory);
            trace("targetPath: " +lime.system.System.desktopDirectory);
    
            var targetPath: String = lime.system.System.applicationStorageDirectory+ NEW;
            trace("targetPath " + targetPath);
            trace("FileSystem.exists(targetPath) " + FileSystem.exists(targetPath));
    
            //Debugging
            /*var bytes:Bytes = Assets.getBytes(CLONE);
            trace("bytes are here "+bytes);
            var content:String = bytes.toString();
            trace("content "+content);
            File.saveContent(targetPath, content);
            trace("Saved");*/
    
            //uncomment when done with errors
            /*if (FileSystem.exists(targetPath) == false)
            {
                var bytes:Bytes = Assets.getBytes(CLONE);
                var content:String = bytes.toString();
                File.saveContent(targetPath, content);
            }*/
    
            var bytes:Bytes = Assets.getBytes(CLONE);
            var content:String = bytes.toString();
            File.saveContent(targetPath, content);
    
            trace("Saved");
    
            try 
            {
                _conn = Sqlite.open(targetPath+NEW);
            }
            catch (e:Dynamic)
            {
                trace("Connection failed with error: "+e);
            }
    
            if (_conn != null)
            {
                trace("Connected to database " +_conn.dbName );
    
                //not getting any database name trying to query
    
                // and KaBoom app gone :D XD
                var result = _conn.request("SELECT * FROM TEST");
                trace("Query Result "+result.results());
    
                //if i comment then it will go and close the connection too
                //without breaking anything O_O             
    
                _conn.close();
    
            }
        }
    
    }
    
  • 共有1个答案

    岳俊雅
    2023-03-14

    我打了个盹,在梦中找到了答案

    问题就在这里

    _conn = Sqlite.open(targetPath+NEW);
    

    修复:

    _conn = Sqlite.open(targetPath);
    
    var targetPath: String = lime.system.System.applicationStorageDirectory+ NEW;
    
     类似资料:
    • Haxe是一门新兴的开源编程语言,开发者称:“相比其他语言(Java的平台是 JVM,C#的平台是.Net,ActionScript的平台是Flash Player等等),Haxe才是真正的多平台语言。不管是开发原生iOS、Android应用,还是网页;不论是应用于服务器还是个人桌面,Haxe都 可以胜任。” Haxe分别为Windows、Mac OSX以及Linux安装程序进行打包,当然如果安装

    • sbt-haxe 是 Sbt 插件,用来编译 Java 或者 Scala 项目中的 Haxe 源。 用法 第一步:在你的Sbt项目中安装sbt-haxe 在 project/plugins.sbt 中加入以下代码: addSbtPlugin("com.qifun" % "sbt-haxe" % "1.0.0") 然后在build.sbt中增加haxeSettings: haxeSettings 第

    • Haxe的Continuation库。允许你以同步语法编写异步代码。

    • 我一直在浏览Haxe/OpenFL/Flixel的网站,但很难理解每一个网站都是为了什么。 Haxe是一种可以部署到多个平台的语言。OpenFL与Flash有关。Flixel是一个帮助你制作游戏的库。 谁能纠正我/说得更清楚些吗。

    • Protocol Buffers 协议的Haxe实现

    • 我想用Haxe导入一个图像,我的图像很大,但它是8位,它的重量是89KB。问题发生在我导入的时候,因为内存的大小增长了35MB。我想它是在为一个32位的图像保留内存。知道如何导入一个8位的图像,而不消耗那么多的内存吗?