kotlin 简单处理 回调参数 加?

Kotlin Parameter specified as non-null is null

2017年10月18日 17:21:49 amiko_ 阅读数:9017

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chf1142152101/article/details/78275298

报错信息如下:


java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter animation
                                                                                       at cn.enjoytoday.expandmateriallayout.ExpandRefreshLayout$mRefreshListener$1.onAnimationEnd(ExpandRefreshLayout.kt:0)
                                                                                       at cn.enjoytoday.expandmateriallayout.ExpandRefreshLayout$HeadViewContainer.onAnimationEnd(ExpandRefreshLayout.kt:1099)
                                                                                       at android.view.ViewGroup.finishAnimatingView(ViewGroup.java:6293)
                                                                                       at android.view.View.draw(View.java:17180)
......

kotlin 中对于回调对象若是为说明可以为空的情况下,kotlin 会自动对齐对象进行非空检查,就会报出如上错误,检查代码发现是设置接口的参数和创建的接口的回调参数的类型设置不一致,如下:


//创建的接口:
private animationListener = object: Animation.AnimationListener {
         override fun onAnimationStart(animation:Animation) {
          ......
        }

        override fun onAnimationRepeat(animation:Animation) {}

        override fun onAnimationEnd(animation:Animation) {
            log(message = "onAnimationEnd")
          ......
        }

    }

//监听的类的声明
class CustomLayout(context:Context):LinearLayout(context){
   private var listener: Animation.AnimationListener? = null

   fun setAnimationListener(listener: Animation.AnimationListener?) {
        this.listener = listener
  }

  public override fun onAnimationStart() {
        super.onAnimationStart()
        log(message = "onAnimationStart animation is null :${animation==null}")
        listener?.onAnimationStart(this.animation)
  }

  public override fun onAnimationEnd() {
        super.onAnimationEnd()
        log(message = "onAnimationEnd animation is null :${animation==null}")
        listener?.onAnimationEnd(this.animation)

  }

}

//使用
fun useMethod(){
    val layout=CustomLayout(context)
    val animation=ScaleAnimation(1f, 0f, 1f, 1f, Animation.RELATIVE_TO_PARENT, 0.5f,
            Animation.RELATIVE_TO_PARENT, 0.5f);
    layout.setAnimationListener(animationListener)
    layout.clearAnimation()
    layout.startAnimation(animation)
}

如上代码所示,通过运行 useMethod 方法,出现 “Parameter specified as non-null is null”报错,解决方法很简单,将我们设置的接口回调参数设置为可空类型即可,如下:


//创建的接口,目前就log看可知,onAnimationStart时animation为非空,onAnimationEnd为空
//因此,也可单独只对onAnimationEnd(animation:Animation)修改.
private animationListener = object: Animation.AnimationListener {
         override fun onAnimationStart(animation:Animation?) {
          ......
        }

        override fun onAnimationRepeat(animation:Animation?) {}

        override fun onAnimationEnd(animation:Animation?) {
            log(message = "onAnimationEnd")
          ......
        }

    }

Enjoytoday,EnjoyCoding

原文地址:https://www.cnblogs.com/vana/p/10977418.html

时间: 2024-10-15 00:37:45

kotlin 简单处理 回调参数 加?的相关文章

asp.net 回发或回调参数无效的各种情况分析及解决办法

昨天,在实现级联菜单的时候,突然出现一下错误: 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证.出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件.如果数据有效并且是预期的,则使用 ClientScriptManager.Register

一个简单的回调(例子)

1.声明一个回调Interface: public interface CallBack { /** * 执行回调方法 * @param objects 将处理后的结果作为参数返回给回调方法 */ public void execute(Object... objects ); } 2.回调的地方继承回调,实现回调的方法: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe

执行 CMD 时,参数加引号常见问题

在调用 CMD 时,如脚本中用 WScript.Shell 调用. 如果参数中有包含空格的长路径名时,必须要加引号才能正确被识别. 是的,大家都知道要加引号,但怎么加却容易被误解.这个问题,不时地会遇上,上次弄清楚了,但隔一段时间,还是忘了,同样的问题又要重新摸索,非常痛苦. 如: Set objShell = WScript.CreateObject("WScript.Shell") cmd = "cmd.exe /C ""C:\Program File

回发或回调参数无效的各种情况分析及解决办法

今天,在实现级联菜单的时候,突然出现以下错误: 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证.出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件.如果数据有效并且是预期的,则使用 ClientScriptManager.Register

回发或回调参数无效。在配置中使用 &lt;pages enableEventValidation=&quot;true&quot;/&gt; 或在页面中使用 &lt;%@ Page EnableEventValidation=&quot;true&quot; %&gt; 启用了事件验证。

回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证.出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件.如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册

asp.net 解决 &quot;回发或回调参数无效&quot; 一些常见解决方案

一.回发或回调参数无效,出现下图错误, 常见解决方案: 1.在页面的<%@ Page Language="C#"  AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"  % 中添加 EnableEventValidation="false" 就可以了.(首先考虑的) 2.Form嵌套,首先一个页面是可以有多个For

简单粗暴的so加解密实现

转载自http://bbs.pediy.com/showthread.php?t=191649 以前一直对.so文件加载时解密不懂,不了解其工作原理和实现思路.最近翻看各种资料,有了一些思路.看到论坛没有类似帖子,故来一帖,也作为学习笔记.限于水平,本菜没有找到安卓平台一些具体实现思路,这些方法都是借鉴其他平台的实现思路和本菜的YY,肯定会有不少疏漏和错误之处,还请各位大牛指正,感激不尽! 简单粗暴的so加解密实现一.  概述利用动态链接库实现安卓应用的核心部分,能一定程度的对抗逆向.由于ida

【zTree】简单实例与异步加载实例

[zTree]简单实例与异步加载实例 我们在项目中经常会需要用到树,这次按照数据库存储的特点重新了做一个小demo,使用zTree来实现这个功能. 简单实例: 首先我们需要在界面中引入代码,很简单,但是很重要,它用来存放加载的树. ps:添加ztree的引用,下载地址:http://www.ztree.me/v3/main.php#_zTreeInfo [html] view plain copy <span style="font-family:KaiTi_GB2312;font-siz

asp微信公众号支付回调参数入库demo详细示例

最近接的一个小项目,客户要求用asp写,微信公众号支付完成后回调入库,晚上加了会班,帮他写了一段asp微信公众号支付回调参数入库demo详细示例 sub AddData() '当本接口网络出现问题或无法返回success字符时,微信将会在30分钟内重复8次后台通知,入库时需要判断是否已经入库,避免重复数据入库 '看看记录存在了吗 dim Rs,SQL,rsf'必须声明,微信支付环境要求很高 set rsf=conn.execute ("select * from Order_Info where