2017-05-26 78 views
0

也许是一个愚蠢的问题,但我无法在任何地方找到答案!VS2017 Android和SQLite

我的应用程序中有一个sqlite预填充数据库,当用户安装应用程序时,我需要将该数据库复制到设备上,我在VS2017的Assets文件夹中有数据库,并将其标记为嵌入式资源,但我可以似乎找不到访问它的正确途径。

任何人都可以指向正确的方向吗?我在这里的正确道路上还是有其他一些需要在某个地方发生的魔法?

感谢 院长

回答

1

首先创建装置外部存储工作目录

public void createDirectory() 
{ 
    bool isExists=false; 
    string folderExternal; 

    try 
    { 
     // folder path 
     folderExternal = "/mnt/sdcard/Sample"; 

     // checking folder available or not 
     isExists= System.IO.Directory.Exists(folderExternal); 

     // if not create the folder 
     if(!isExists) 
     System.IO.Directory.CreateDirectory(folderExternal); 

     folderExternal = "/mnt/sdcard/Sample/WorkingDB"; 
     isExists = System.IO.Directory.Exists(folderExternal); 

     if(!isExists) 
      System.IO.Directory.CreateDirectory(folderExternal); 
    } 
} 

然后你的数据库从资源文件夹

public void CopyDBFileFromAssetFolder() 
{ 
    try{ 
     //checking file exist in location or no 
     if (!File.Exists (Constants.DatabasebFilePath)) 
     {  
      //display progress bar or loader animation 
      // Java thread is used for creating or copying 
      // database file because this will not make the program non responsive 

      new Java.Lang.Thread(() => 
      { 
       // calling data from Asset folder 
       using (var asset = Assets.Open ("Empty_DB.db")) 
       using (var dest = File.Create (AppGlobal.DatabasebFilePath)) 
       { 
        // copying database from Asset folder to external storage device 
        asset.CopyTo (dest); 
       } 

       RunOnUiThread(() => onSuccessfulLogin()); 
      }).Start(); 
     } 

    } catch (System.Exception ex) { 
     //handle exception 
    } 
} 
+0

感谢Fahadsk复制,这一切才有意义,除了这条线尝试“使用(var asset = Assets.Open(”stocktake.db“))时出现”FileNotFoundException“失败” 我有c hecked,我知道该文件是在项目中的资产目录至少... –

+0

我想你忘了将'Build Action'设置为'AndroidAsset' '右键单击文件>属性>构建操作> AndroidAsset' – Fahadsk

+0

当然,是的,我错过了,谢谢我尝试在/ mnt/sdcard中创建目录时遇到拒绝访问。我会尝试不同的路径。 –