我有一个界面
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);
。但是仍然崩溃。
有帮助吗?
答案 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();
}
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()
让我知道这是否适合您,如果不能,请提供更多代码。