0

我想为我现有的应用程序实现下载功能,但它会引发异常,我不知道为什么。

我新创建了一个新的flutter项目并安装了flutter_downloader插件,它工作正常,但是当我在现有应用程序中以相同的方式实现该功能时,它会抛出一个错误。

堆栈跟踪在这里:

2019-11-02 13:11:44.655 13280-13280/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.app, PID: 13280
java.lang.IllegalStateException: registrar.activity() must not be null
    at co.paystack.flutterpaystack.FlutterPaystackPlugin$Companion.registerWith(FlutterPaystackPlugin.kt:18)
    at co.paystack.flutterpaystack.FlutterPaystackPlugin.registerWith(Unknown Source:2)
    at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:30)
    at com.example.app.FlutterCustomApp.registerWith(FlutterCustomApp.java:10)
    at vn.hunghd.flutterdownloader.DownloadWorker.startBackgroundIsolate(DownloadWorker.java:124)
    at vn.hunghd.flutterdownloader.DownloadWorker.access$000(DownloadWorker.java:59)
    at vn.hunghd.flutterdownloader.DownloadWorker$1.run(DownloadWorker.java:97)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:7000)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

这是我的自定义应用程序类:

public class FlutterCustomApp extends FlutterApplication implements PluginRegistry.PluginRegistrantCallback {
@Override
public void registerWith(PluginRegistry registry) {
    GeneratedPluginRegistrant.registerWith(registry);
}

}

我也在AndroidManifest.xml文件中指定了类名。

但是当我启动下载任务时,会引发上述异常并且应用程序崩溃。我仍然无法弄清楚为什么会这样。

  • compileSdkVersion: 28
  • compileSdkVersion: 21
  • 目标SDK版本:28
  • 毕业版本:3.5.1
4

1 回答 1

0

由于 Flutter 引擎需要与依赖于 android 生命周期的原生 android 通信(如果你看一下FlutterActivity),插件的注册表应该开始在 Activity 而不是应用程序类上注册。

您应该在第一个 Splash Activity 或 BaseActivity onCreate 上调用插件注册,如果没有其他具体问题或原因,如 JNI 初始化或 Flutter 引擎相关的配置更改:

class MainActivity: FlutterActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    GeneratedPluginRegistrant.registerWith(this)
  }
}
于 2019-11-02T12:21:47.263 回答