尝试从Flutter中的Registar获取上下文时出现Kotlin空指针异常

德里克·汉娜(Derek Hannah)

我正在尝试创建使用本机Android SDK的Flutter插件

我能够编译sdk的.aar库,并在项目中使用它们,但是sdk需要我获取主要活动的上下文

这是我得到的错误

E/MethodChannel#mychart_plugin(16277): Failed to handle method call
E/MethodChannel#mychart_plugin(16277): kotlin.KotlinNullPointerException
E/MethodChannel#mychart_plugin(16277):  at org.ccf.flutter.plugin.mychart_plugin.MychartPlugin.getContext(MychartPlugin.kt:79)
E/MethodChannel#mychart_plugin(16277):  at epic.mychart.android.library.api.authentication.WPAPIAuthentication$1.getContext(WPAPIAuthentication.java:564)
E/MethodChannel#mychart_plugin(16277):  at epic.mychart.android.library.prelogin.AuthenticationService.libraryLogin(AuthenticationService.java:461)
E/MethodChannel#mychart_plugin(16277):  at epic.mychart.android.library.api.authentication.WPAPIAuthentication.login(WPAPIAuthentication.java:411)
E/MethodChannel#mychart_plugin(16277):  at org.ccf.flutter.plugin.mychart_plugin.MychartPlugin.onMethodCall(MychartPlugin.kt:42)
E/MethodChannel#mychart_plugin(16277):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:201)
E/MethodChannel#mychart_plugin(16277):  at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:88)
E/MethodChannel#mychart_plugin(16277):  at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:219)
E/MethodChannel#mychart_plugin(16277):  at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#mychart_plugin(16277):  at android.os.MessageQueue.next(MessageQueue.java:325)
E/MethodChannel#mychart_plugin(16277):  at android.os.Looper.loop(Looper.java:142)
E/MethodChannel#mychart_plugin(16277):  at android.app.ActivityThread.main(ActivityThread.java:6541)
E/MethodChannel#mychart_plugin(16277):  at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#mychart_plugin(16277):  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
E/MethodChannel#mychart_plugin(16277):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

这是我获取上下文的代码

class MychartPlugin: MethodCallHandler, WPAPIAuthentication.IWPOnLoginListener {
private var registrar: PluginRegistry.Registrar? = null
private val LOGIN_REQUEST_CODE = 9876

fun MychartPlugin(registrar: PluginRegistry.Registrar) {
  this.registrar = registrar
}
companion object {
  @JvmStatic
  fun registerWith(registrar: Registrar) {
    val channel = MethodChannel(registrar.messenger(), "mychart_plugin")
    channel.setMethodCallHandler(MychartPlugin())
  }
}

override fun onMethodCall(call: MethodCall, result: Result) {
  if (call.method == "getPlatformVersion") {
    result.success("Android ${android.os.Build.VERSION.RELEASE}")
  } else if (call.method == "MyChartSdkLogin") {
  WPAPIAuthentication.login(this, "TURKJ123", "TurkJ123", LOGIN_REQUEST_CODE)
    result.success("called MyChartSdkLogin")
  }  else {
    result.notImplemented()
  }
}


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
  // super.onActivityResult(requestCode, resultCode, data)
  if (requestCode == LOGIN_REQUEST_CODE) {
    if (resultCode == Activity.RESULT_OK) {
      // login successful
      Log.i("LoginFragment", "OK")

    } else {
      // login failed
      val result = WPAPIAuthentication.getLoginResult(data)
      Log.i("LoginFragment", result.toString())
      val errorMessage = result.getErrorMessage(getContext())
      if (!errorMessage.isEmpty()) {
        Toast.makeText(getContext(), errorMessage, Toast.LENGTH_LONG).show()
      }
    }
  }
}

override fun startActivityForResult(p0: Intent, p1: Int) {
  // super.startActivityForResult(p0, p1)
}

override fun getSupportFragmentManager(): FragmentManager {
  val act = registrar!!.activity() as FragmentActivity
  return act.getSupportFragmentManager()
}

override fun getContext(): Context {
  val cxt = registrar!!.context()
  return cxt
}

}

请注意我从sdk覆盖的override getContext()方法,我认为此对registar的上下文调用是我的KotlinNullPointerException来自的地方

阿列克谢·罗曼诺夫(Alexey Romanov)

getContext你里面registrar!!并且registrar是一个可为空的字段,您null可以将其初始化为该字段,并且只能在从未调用的方法中进行设置。请注意,fun MychartPlugin它不是构造函数,您可以将其称为例如

val plugin = MychartPlugin()
plugin.MychartPlugin(registrar)

但是似乎没有任何理由首先使registrarnull或可变。您可以更改为

class MychartPlugin(private val registrar: Registrar): ...

fun registerWith(registrar: Registrar) {
  val channel = MethodChannel(registrar.messenger(), "mychart_plugin")
  channel.setMethodCallHandler(MychartPlugin(registrar))
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

上下文空指针

来自分类Dev

在自定义适配器类中显示空指针异常的上下文?

来自分类Dev

在Flutter中获取全局上下文

来自分类Dev

尝试检索PackageInfo时获取空上下文

来自分类Dev

在 myAdapter 中从上下文膨胀布局时获取空引用

来自分类Dev

找不到上下文时如何在 Kotlin 代码中获取 XML 的资源?

来自分类Dev

在FragmentView Kotlin中获取上下文的问题

来自分类Dev

如何在Kotlin中获取ClusterManager的上下文

来自分类Dev

如何获取异常的上下文

来自分类Dev

如何获取C ++异常的上下文?

来自分类Dev

Flutter在initState方法中获取上下文

来自分类Dev

尝试切换上下文时出现Kubectl配置使用上下文错误

来自分类Java

尝试合并链接列表时出现空指针异常

来自分类Dev

尝试将JNDI用于JDBC时出现空指针异常

来自分类Dev

尝试压缩位图时出现空指针异常

来自分类Dev

尝试在片段之间传递数据时出现空指针异常

来自分类Dev

尝试使用 riemann 写入文件时出现空指针异常

来自分类Dev

尝试打开活动时 Kotlin 空指针异常

来自分类Dev

尝试在方法中访问三角数组时出现空指针异常

来自分类Dev

使用上下文获取Drawable的标识符会导致Null指针异常

来自分类Dev

Flutter - 如何获取当前上下文?

来自分类Dev

尝试在Android中创建倒数计时器时出现运行时异常和空指针异常

来自分类Dev

值不能为空。参数名称:尝试解析类时的上下文

来自分类Dev

为什么Sigaction处理程序中的上下文是空指针?

来自分类Dev

实体框架验证上下文-空测试中的空异常

来自分类Dev

从分离的片段中获取上下文?

来自分类Dev

在JavaScript中获取servlet上下文

来自分类Dev

在Java类中获取上下文

来自分类Dev

在服务中获取上下文

Related 相关文章

  1. 1

    上下文空指针

  2. 2

    在自定义适配器类中显示空指针异常的上下文?

  3. 3

    在Flutter中获取全局上下文

  4. 4

    尝试检索PackageInfo时获取空上下文

  5. 5

    在 myAdapter 中从上下文膨胀布局时获取空引用

  6. 6

    找不到上下文时如何在 Kotlin 代码中获取 XML 的资源?

  7. 7

    在FragmentView Kotlin中获取上下文的问题

  8. 8

    如何在Kotlin中获取ClusterManager的上下文

  9. 9

    如何获取异常的上下文

  10. 10

    如何获取C ++异常的上下文?

  11. 11

    Flutter在initState方法中获取上下文

  12. 12

    尝试切换上下文时出现Kubectl配置使用上下文错误

  13. 13

    尝试合并链接列表时出现空指针异常

  14. 14

    尝试将JNDI用于JDBC时出现空指针异常

  15. 15

    尝试压缩位图时出现空指针异常

  16. 16

    尝试在片段之间传递数据时出现空指针异常

  17. 17

    尝试使用 riemann 写入文件时出现空指针异常

  18. 18

    尝试打开活动时 Kotlin 空指针异常

  19. 19

    尝试在方法中访问三角数组时出现空指针异常

  20. 20

    使用上下文获取Drawable的标识符会导致Null指针异常

  21. 21

    Flutter - 如何获取当前上下文?

  22. 22

    尝试在Android中创建倒数计时器时出现运行时异常和空指针异常

  23. 23

    值不能为空。参数名称:尝试解析类时的上下文

  24. 24

    为什么Sigaction处理程序中的上下文是空指针?

  25. 25

    实体框架验证上下文-空测试中的空异常

  26. 26

    从分离的片段中获取上下文?

  27. 27

    在JavaScript中获取servlet上下文

  28. 28

    在Java类中获取上下文

  29. 29

    在服务中获取上下文

热门标签

归档