Xamarin 服务和表单初始化
Posted
技术标签:
【中文标题】Xamarin 服务和表单初始化【英文标题】:Xamarin Service and Forms Init 【发布时间】:2019-05-13 11:20:35 【问题描述】:我正在编写一个由服务和配置页面组成的 Xamarin android 应用程序。 该服务在设备启动后启动(由 BroadcastReceiver 启动)并且需要数据库连接来读取配置。 当服务尝试读取数据库时收到错误消息:
您必须调用 Xamarin.Forms.Init();在使用之前。
对于数据库连接,我使用的是 SQLite.Net。 我知道我需要调用 Xamarin.Forms.Init() 来使用数据库,但我不知道该怎么做。 Init() 方法需要上下文和 Android.OS.Bundle 作为输入,但在 BroadcastReceiver 类中,我只有上下文。如何检索捆绑包?还有其他方法吗?
这是异常堆栈跟踪:
at Xamarin.Forms.Device.get_PlatformServices () at Xamarin.Forms.Device.GetAssemblies () at Xamarin.Forms.DependencyService.Initialize () at Xamarin.Forms.DependencyService.Get[T] (Xamarin.Forms.DependencyFetchTarget fetchTarget) at MyProject.Database.ConfigurationDBService..ctor () at MyProject.Utils.ConfigurationUtils.getConfig () at MyProject.InvoiceUploadService.OnStartCommand (Android.Content.Intent intent, Android.App.StartCommandFlags flags,System.Int32 startId)
【问题讨论】:
使您的Service
独立于 Xamarin.Forms
(您不需要 Init'd Forms App 来进行 SQLite 连接。)
我该怎么做?我认为现在我需要 Xamarin.Forms,因为对于数据库连接,我使用 DependencyService
Forms 的 DependencyService 正在调用“本机”代码,您的 Android 服务已经在“本机”代码中运行。您的 DS 用于 Android 的任何代码都可以在没有 DS 的情况下使用。
我不知道...我在帖子中添加了异常堆栈跟踪。有用吗?
根本不要使用 DependencyService,您已经在服务中运行 Android 代码,请使用 DependencyService 将调用的 Android 代码。
【参考方案1】:
按照问题 cmets 中 SushiHangover 的建议,我通过在没有 DependecyService 的情况下运行数据库连接解决了这个问题。
【讨论】:
【参考方案2】:放:
Xamarin.Forms.Init();
在 Android 项目的 MainActivity.cs 类中。
【讨论】:
Forms.Init 已经存在于 MainActivity.cs 中。如果我通过双击图标启动应用程序,则一切正常。问题是服务不是通过 MainActivity 启动的。以上是关于Xamarin 服务和表单初始化的主要内容,如果未能解决你的问题,请参考以下文章