我在xamarin表单项目中遇到了SQLite问题。但是SQLiteConnection
我试图在Android平台中示例化,出现了异常。
在Android和iOS项目中使用的库
- 网络版-PCL3.1.1
- SQLite网络核心-PCL 3.1.1
清单文件目标版本
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="27" />
安卓SQLite.cs文件
using SQLite;
using SQLite.Net;
using System.IO;
namespace XamarinTestList.Droid.Implementations
{
public class AndroidSQLite : ISQLite
{
public SQLiteConnection GetConnection()
{
string documentPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var path = Path.Combine(documentPath, DatabaseHelper.DbFileName); //DbFileName="Contacts.db"
var plat = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
string dpPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "user.db3");
var conn= new SQLiteConnection(plat, dpPath);
return conn;
}
}
}
正在获取异常
var conn= new SQLiteConnection(plat, dpPath);
我已经在解决方案级别安装了上述库,但在 * 共享项目 * 中,没有安装Nuget包的选项。共享项目屏幕截图
跟随本文学习SQLite和xamarin xamarin forms-mvvm-sqlite-sample。
完整例外情况如下
{系统. DLL未找到异常:/system/lib/libsqlite.so,位于( Package 器管理到本机)SQLite.Net.Platform.XamarinAndroid.SQLiteApiAndroidInternal.sqlite3_open_v2(字节[],整数指针&,整数,整数指针),位于SQLite.Net.平台. XamarinAndroid.SQLiteApiAndroid.打开(系统.字节[]文件名,SQLite.Net.互操作. IDb句柄&数据库,系统.整数32标志,系统.整数指针zvfs)[0x 00000],位于<8dbf6ff85082469fb9d4dfaa9eae6b69>:0,位于SQLite .NET. SQLiteConnection.. ctor(SQLite.Net.Interop.ISQLitePlatform sqlitePlatform,系统.字符串数据库路径,SQLite.Net.Interop.SQLiteOpenFlags openFlags,系统.布尔值存储DateTimeAsTicks,SQLite.Net.IBlobSerializer序列化程序,系统.集合.通用.标识词典2[TKey,TValue] tableMappings, System.Collections.Generic.IDictionary
2[TKey,TValue]额外类型Map,SQLite.Net.IContractResolver解析器)[0x 000 a2]位于<8f2bb39aeff94a30a8628064be9c7efe>:0位于SQLite. Net. SQLiteConnection.. ctor(SQLite.Net.Interop.ISQLitePlatform sqlitePlatform,系统.字符串数据库路径,系统.布尔存储DateTimeAsTicks,SQLite.Net.IBlobSerializer序列化程序,系统.集合.通用.标识词典2[TKey,TValue] tableMappings, System.Collections.Generic.IDictionary
2[TKey,TValue] extraTypeMappings,SQLite.Net.IContractResolver解析器)[0x 00000]位于<8f2bb39aeff94a30a8628064be9c7efe>:0
3条答案
按热度按时间iqxoj9l91#
您使用的SQLite.Net-PCL nuget不再由其作者维护。您需要切换到其他类似的软件包sqlite-net-pcl
首先从所有项目中删除现有的
SQLite.Net-PCL
nuget并安装我上面提到的那个,从所有文件中删除所有旧的SQLite
相关引用。您需要在与
SQLite
连接相关的依赖关系服务类中进行一些更改。然后,您可以调整与SQLite
相关的一些其他代码。通过为新的nuget包添加适当的using语句来解决引用问题。我得到了同样的错误,我解决了它切换到上述nuget包。
注意:新的nuget包还没有
InsertOrReplaceAll
方法。因此,如果您已在以前的nuget中使用此方法,则对于新的nuget,您需要创建InsertOrReplaceAll extension method。编辑:要获取SQLiteConnection:
在此新块中无需传递平台。如果不希望将DateTime存储为刻度,请传递
false
。olmpazwi2#
2个选择
1.更改targetSdkVersion〈24,自Android 7以来,应用程序无法访问系统私有库。
1.将www.example.com添加libsqlite.so到您自己的lib文件夹中。
dxxyhpgq3#
虽然有点晚了,但是对于面临同样问题的人来说,您只需要在本机代码中添加一行
如果这不起作用,请卸载现有的sqlite-net-pcl并安装sqlite-net-pcl此库,然后重试