【问题标题】:Xamarin Service and Forms InitXamarin 服务和表单初始化
【发布时间】: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 代码。

标签: c# android sqlite xamarin sqlite.net


【解决方案1】:

按照问题 cmets 中 SushiHangover 的建议,我通过在没有 DependecyService 的情况下运行数据库连接解决了这个问题。

【讨论】:

    【解决方案2】:

    放:

    Xamarin.Forms.Init();
    

    在 Android 项目的 MainActivity.cs 类中。

    【讨论】:

    • Forms.Init 已经存在于 MainActivity.cs 中。如果我通过双击图标启动应用程序,则一切正常。问题是服务不是通过 MainActivity 启动的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2015-09-15
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多