Sqlite Android后台获取中的flatteraccess数据库

Sqlite Android后台获取中的flatteraccess数据库,sqlite,flutter,dart,background-fetch,Sqlite,Flutter,Dart,Background Fetch,我试图在应用程序完全关闭时访问设备上的本地数据库,为此,我使用sqlite插件sqflite:^1.2.0和后台提取插件background\u fetch:^0.4.0 我能够注册无头后台任务,没有任何问题,当我尝试运行后台任务时,我得到以下错误 当应用程序运行或进入后台模式时,插件似乎工作正常 有什么建议吗 错误 [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(N

我试图在应用程序完全关闭时访问设备上的本地数据库,为此,我使用sqlite插件
sqflite:^1.2.0
和后台提取插件
background\u fetch:^0.4.0

我能够注册无头后台任务,没有任何问题,当我尝试运行后台任务时,我得到以下错误

当应用程序运行或进入后台模式时,插件似乎工作正常

有什么建议吗

错误

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method getDatabasesPath on channel com.tekartik.sqflite)
颤振版本:

Flutter 1.12.13+hotfix.7 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 9f5ff2306b (11 days ago) • 2020-01-26 22:38:26 -0800
Engine • revision a67792536c
Tools • Dart 2.7.0
颤振医生

[✓] Flutter (Channel stable, v1.12.13+hotfix.7, on Mac OS X 10.15.2 19C57, locale en-GB)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 11.3)
[✓] Android Studio (version 3.5)
[✓] Connected device (1 available)

• No issues found!


您可以尝试查看他们Github页面上的
sqflite
疑难解答部分,尤其是。让我把那页上的内容贴在这里

此错误通常是添加依赖项后的生成/设置错误

  • 尝试文档顶部定义的所有步骤
  • 确保停止当前正在运行的应用程序(如果有)
  • 用力拍打包裹
  • 尝试清理您的生成文件夹
  • 在iOS上,您可以尝试强制pod安装/pod更新
  • 像这样在flift中搜索其他bug,其他人在其他插件中也会遇到同样的问题,因此它可能与sqflite无关
高级支票:

检查Flatter run应该在项目中生成的GeneratedPluginRegistrant文件,该文件包含注册插件的行

安卓:

SqflitePlugin.registerWith(registry.registerfor(“com.tekartik.sqflite.SqflitePlugin”);
iOS:

  • Check MainActivity.java(Android)包含对GeneratedPluginRegistrent的调用,要求它注册自身。此调用应通过应用程序启动方法(onCreate)进行
公共类main活动扩展了公共类main活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
生成带有(this)的pluginregistrant.registerWith;
}
}
  • Check AppDelegate.m(iOS)包含对GeneratedPluginRegistrant的调用,要求它注册自身。此调用应通过应用程序启动方法进行(应用程序:didFinishLaunchingWithOptions:)
在提出此问题之前,请尝试添加另一个完善的插件(最简单的插件是
path\u provider
shared\u preferences
),以查看此处是否也出现错误


有一些关于使用背景隔离的sqflite的实验,我不确定这里的插件支持。无论如何,事务机制在同一进程中的隔离之间是不安全的,因此我建议从主隔离中使用sqflite(它已经使用了自己的线程)。

如果您的情况与我的情况相同,我有一个带有Kotlin的自定义插件,因此我没有在
主活动中导入
GeneratedPluginRegistrant.registerWith(此)
。相反,我在
configureflatterengine()
函数的开头实现了它,它工作得非常好

import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity : FlutterActivity() {

    private val CHANNEL = "getEpubs"
    var _eventSink: EventChannel.EventSink? = null

    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine)
}
这将注册生成的sqflite插件对设备上数据库的访问

(很抱歉使用Kotlin代码,但您可以将其更改为Java。)

别忘了导入:

io.flutter.plugins.GeneratedPluginRegistrant

这可能是因为您的项目中的其他插件之一在插件注册期间失败,并阻止下面列出的其他插件注册

如果您在日志中看到下面的行

Tried to automatically register plugins with FlutterEngine @{engine hash appears here} but could not find and invoke the GeneratedPluginRegistrant;
GeneratedPluginRegister
registerGeneratedPlugins()
静态方法中设置断点,以查看引发的异常


在我的例子中,我使用了一个名为
io.flatter.plugin.common.PluginRegistry.register
activity()
方法的插件,当应用程序中没有前台活动时,该方法返回null。

嗨,谢谢你的回复,我已经完成了上述所有检查,当应用程序在前台时,插件工作正常,问题是当应用程序在无头模式下运行时。您好,我正在尝试在应用程序的无头环境中运行我的代码,因此这是一个每15分钟运行一次的后台服务,即使应用程序已关闭。后台抓取插件似乎工作正常,我就是无法访问数据库。
io.flutter.plugins.GeneratedPluginRegistrant
Tried to automatically register plugins with FlutterEngine @{engine hash appears here} but could not find and invoke the GeneratedPluginRegistrant;