Ошибка при попытке открыть соединение с базой данных sqlite - PullRequest
0 голосов
/ 13 октября 2018

У меня есть интерфейс

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);
 }

Так что, когда я убиваю свое приложение или в любом случайном случае, приложение вылетает.И Центр приложений сообщает причину сбоя как:

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

Я добавил global::Xamarin.Forms.Forms.Init(this, bundle); в MainActivity.cs файл.Но все равно происходит сбой.

Любая помощь?

1 Ответ

0 голосов
/ 16 октября 2018

Прежде всего, убедитесь, что в вашем 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 {<br> public class SqLiteAndroid:ISQLite { public SQLiteConnection GetConnection() { //return connection here } } }

и iOS пример,тот же принцип , но обратите внимание на другое пространство имен и сборку

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

  • Вызов DependencyService для получения соединениянапример, в вашем App.xaml.cs

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

Дайте мне знать, если это работает для вас, если нет, пожалуйста, предоставьте еще немного кода.

...