【发布时间】:2018-04-05 12:56:08
【问题描述】:
我正在尝试实现 SQLite 的基本用法。我有一个Button 和一个EditText。我想存储EditTextOnClick 的内容。
我正在关注这个:https://developer.xamarin.com/guides/android/application_fundamentals/data/part_3_using_sqlite_orm/
和https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/databases/
如果没有收到后续错误,我无法通过以下起始代码:var db = new SQLiteConnection (dbPath);
错误:
“SQLite.SQLiteConnection”的类型初始化器抛出异常。
内部异常:
System.Exception:这是“诱饵”。您可能需要添加其中之一 将 SQLitePCLRaw.bundle_* nuget 包添加到您的平台项目中。
在 SQLitePCL.Batteries_V2.Init () [0x00000] 中 :0 在 SQLite.SQLiteConnection..cctor () [0x00000] 在 /Users/vagrant/git/src/SQLite.cs:169 }
我已经在 PCL 和 Android 项目中安装了 NuGet 包。我看到安装了以下软件包:
SQLitePCLRaw.provider.e_sqlite3.android
SQLitePCLRaw.lib.e_sqlite3.android
我试过安装:
SQLitePCLRaw.bundle_e_sqlite3
如前所述,代码是可能的最基本实现:
try
{
string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "TestDB-DEV.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<PersonName>();
}
我为此花了几天时间并尝试了许多资源,例如:https://forums.xamarin.com/discussion/87289/sqlite-net-pcl-bait-issue,但最终没有成功。
不幸的是,诸如“它只是有效”、“不确定我做了什么”、“清理/重建”之类的废话是我见过的唯一答案,例如上一个链接,其他 SO 帖子,如 Xamarin SQLite "This is the 'bait'"
这是我的 Android 项目package.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.core" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.lib.e_sqlite3.android" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.provider.e_sqlite3.android" version="1.1.5" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Design" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v4" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.CardView" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.MediaRouter" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Forms" version="2.4.0.282" targetFramework="monoandroid60" />
</packages>
这是 PCL 项目的 package.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.5" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.core" version="1.1.5" targetFramework="portable45-net45+win8+wpa81" />
<package id="Xamarin.Forms" version="2.3.4.247" targetFramework="portable45-net45+win8+wpa81" />
</packages>
【问题讨论】:
-
如果您使用 XF,您应该遵循 XF 指南,而不是 Android 指南。见developer.xamarin.com/guides/xamarin-forms/…
-
我实际上是从那里开始的。那是我的第一个向导。我正在使用指南中显示的 NuGet 包。
-
我很惊讶我直到现在才注意到这一点,但是“monoandroid60”重要吗?我的设备是 API24,所以是“monoandroid70”。我想我会安装更新的 SDK 看看是否有帮助。
标签: c# xamarin xamarin.android sqlite-net-pcl