在我的app.xaml.cs文件中,我创建了一个新页面。
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new WrapLayoutPage());
}
这个页面调用了一个静态类,该类使用DependencyService执行一些任务。
抛出错误的那一行:
var tmpTable = SqLiteHelper.GetItem<TableX>("someId");
SqLiteHelper:
public static class SqLiteHelper
{
private static readonly SQLiteConnection DatabaseConnection = DependencyService.Get<ISqLite>().GetConnection();
private static readonly object Locker = new object();
public static DbObjectV3 GetItem<T>(Guid inId) where T : DbObjectV3, new()
{
lock (Locker)
{
var tmpItem = DatabaseConnection.Table<T>().FirstOrDefault(inItem => inItem.Id == inId);
tmpItem.IsNewObject = false;
return tmpItem;
}
}
}
这给我抛出了一个TypeInitializationException
,并且InnerException是:
在使用之前,您必须调用Xamarin.Forms.Init();
这与静态帮助类有关,因为在调用之前,我可以无问题地使用DependencyService!
作为主要启动器,我正在使用一个启动画面。在这个类中,我进行一些启动工作,这些工作依赖于DependencyService。
启动画面:
[Activity(Theme = "@style/MyTheme.Splash", NoHistory = true, MainLauncher = true)]
public class SplashScreen : Activity
{
static readonly string TAG = "X:" + typeof(SplashScreen).Name;
public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
{
base.OnCreate(savedInstanceState, persistentState);
Log.Debug(TAG, "SplashActivity.OnCreate");
}
}
我的MainActivity:
[Activity(Label = "FrameworkForms", Icon = "@drawable/icon", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, Theme = "@style/MainActivityTheme", MainLauncher = false)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Xamarin.Forms.Forms.Init(this, bundle);
App.ScreenWidth = (double)(Resources.DisplayMetrics.WidthPixels / Resources.DisplayMetrics.Density);
LoadApplication(new App());
}
}
现在,将SplashScreen中的Activity更改为FormsAppCompatActivity后,我又遇到了另一个错误。
在隐藏键盘之前调用Forms.Init()
这里出了什么问题?
MainActivity
的基类从FormsApplicationActivity
更改为FormsAppCompatActivity
吗?当我创建一个新项目时,后者是默认值,并且编译和运行都很好。 - Demitrian