尝试打开 sqlite 数据库连接时出错



我有一个接口

SQLiteConnection _connection = Getconnection();
public SQLite.SQLiteConnection GetConnection()
{
const string sqliteFilename = "TCRMobile.db3";
string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder
var dbPath = Path.Combine(documentsPath, sqliteFilename);
return new SQLite.SQLiteConnection(dbPath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.FullMutex, false);
}

因此,当我杀死我的应用程序或在任何随机情况下,应用程序崩溃了。App Center 将崩溃原因显示为:

Cache.get_Connection ()
System.InvalidOperationException: You MUST call Xamarin.Forms.Init(); prior 
to using it.
Device.get_PlatformServices ()
Device.GetAssemblies ()
DependencyService.Initialize ()
DependencyService.Get[T] (Xamarin.Forms.DependencyFetchTarget fetchTarget)
Cache.get_Connection ()
TCRMobile.DataAccess.DataAccessBase..cctor () [0x00005] in 
<7ccb325064fd467288e39511a2bcad63>:0

我在MainActivity .cs文件中添加了global::Xamarin.Forms.Forms.Init(this, bundle);。但它仍然崩溃了。

有什么帮助吗?

首先,确保在您的MainActivity.cs (Android(/AppDelegate.cs(iOS( 中,在制作应用程序之前调用Forms.Init

所以这样的事情是正确的方法

global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());

如果上述内容正确,请检查流程。 你应该有

  • 可移植类中的接口

public interface ISQLite { SQLiteConnection GetConnection(); }

  • 每个平台(例如 iOS/Android/UWP(的实现,其中包含一个assembly标记

安卓示例

[assembly: Xamarin.Forms.Dependency(typeof(SqLiteAndroid))] namespace Your.Namespace.Droid {
public class SqLiteAndroid:ISQLite { public SQLiteConnection GetConnection() { //return connection here } } }

iOS示例,原理相同,但请注意不同的命名空间和程序集

[assembly: Xamarin.Forms.Dependency(typeof(SqLiteiOS))] namespace Your.Namespace.iOS {
public class SqLiteiOS:ISQLite { public SQLiteConnection GetConnection() { //return connection here } } }

  • 调用DependencyService以获取连接,例如在App.xaml 中.cs

string sqlConnection= DependencyService.Get<ISQLite>().GetConnection()

让我知道这是否适合您,如果没有,请提供更多代码。

相关内容

  • 没有找到相关文章

最新更新