我有一个接口
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()
让我知道这是否适合您,如果没有,请提供更多代码。