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

时间:2018-10-12 22:49:58

标签: sqlite xamarin.forms xamarin.android android-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);。但是仍然崩溃。

有帮助吗?

1 个答案:

答案 0 :(得分:0)

首先,请确保在制作您的 MainActivity.cs (Android)/ AppDelegate.cs (iOS)中调用Forms.Init App 的版本。

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

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

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

  • 可移植类中的接口

public interface ISQLite { SQLiteConnection GetConnection(); }

  • 每个平台(包括iOS / Android / UWP)的实现,其中都包含一个assembly标签

Android 示例

[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()

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