Android IllegalArgumentException:指定为非null的参数为null

Android IllegalArgumentException:指定为非null的参数为null,android,exception,null,kotlin,Android,Exception,Null,Kotlin,我得到以下运行时错误: checkParameterIsNotNull, parameter oneClickTokens at com.info.app.fragments.Fragment_Payment_Profile$fetchMerchantHashes$1.onPostExecute(Fragment_Payment_Profile.kt:0) at com.info.app.fragments.Fragment_Payment_Profile$fetchMerch

我得到以下运行时错误:

 checkParameterIsNotNull, parameter oneClickTokens
    at com.info.app.fragments.Fragment_Payment_Profile$fetchMerchantHashes$1.onPostExecute(Fragment_Payment_Profile.kt:0)
    at com.info.app.fragments.Fragment_Payment_Profile$fetchMerchantHashes$1.onPostExecute(Fragment_Payment_Profile.kt:1543)
 private fun fetchMerchantHashes(intent: Intent) {
    // now make the api call.
    val postParams = "merchant_key=$key&user_credentials=$var1"
    val baseActivityIntent = intent
    object : AsyncTask<Void, Void, HashMap<String, String>>() {

        override fun doInBackground(vararg params: Void): HashMap<String, String>? {
                ...
        }

        override fun onPostExecute(oneClickTokens: HashMap<String, String>) {
            super.onPostExecute(oneClickTokens)
            ...

        }
    }.execute()
}
这是我的代码:

 checkParameterIsNotNull, parameter oneClickTokens
    at com.info.app.fragments.Fragment_Payment_Profile$fetchMerchantHashes$1.onPostExecute(Fragment_Payment_Profile.kt:0)
    at com.info.app.fragments.Fragment_Payment_Profile$fetchMerchantHashes$1.onPostExecute(Fragment_Payment_Profile.kt:1543)
 private fun fetchMerchantHashes(intent: Intent) {
    // now make the api call.
    val postParams = "merchant_key=$key&user_credentials=$var1"
    val baseActivityIntent = intent
    object : AsyncTask<Void, Void, HashMap<String, String>>() {

        override fun doInBackground(vararg params: Void): HashMap<String, String>? {
                ...
        }

        override fun onPostExecute(oneClickTokens: HashMap<String, String>) {
            super.onPostExecute(oneClickTokens)
            ...

        }
    }.execute()
}
私人娱乐场所(意图:意图){
//现在进行api调用。
val postParams=“商户密钥=$key和用户凭据=$var1”
val baseActivityIntent=intent
对象:AsyncTask(){
覆盖有趣的doInBackground(vararg参数:Void):HashMap{
...
}
重写onPostExecute(oneClickTokens:HashMap){
super.onPostExecute(oneClickTokens)
...
}
}.execute()
}

函数调用似乎无效。然而,我不知道如何解决这个问题。我有没有遗漏任何关于科特林的细节

异常非常清楚:您正在为参数传递
null

默认情况下,Kotlin中的所有变量和参数均为非空。如果要向方法传递
null
参数,则应向其类型添加
,例如:

fun fetchMerchantHashes(intent: Intent?)

有关详细信息:.

在我的例子中,此错误警告可能会将null作为参数传递。三种纠正方法

  • 在相应位置更改参数的类型。如果它是从Java接收的,则将
    @NonNull
    注释添加到变量定义中
  • 添加
    指向该方法的参数
  • 添加到Kotlin类中的参数。我认为,Kotlin转换工具在默认情况下可能会这样做,如果Java类中没有使用注释(比如
    @Nullable
    @NonNull

  • 在使用AndroidStudio转换工具将一个活动从Java转换为Kotlin之后,我发现了类似的异常。所以,我得到了
    覆盖activityresult的乐趣(requestCode:Int,resultCode:Int,data:Intent)

    这是正确的
    覆盖activityresult的乐趣(请求代码:Int,结果代码:Int,数据:Intent?


    意图的不同:意图?

    简单的答案肯定有用。。。 当您使用Rest客户端(Web服务调用)(GET或POST)从服务器获取数据时,如果json响应中可能存在空参数值,并且您获取参数并将其附加到textview,则会出现此错误

    解决方案: 只是附加?标记变量,如下所示

    示例:

    var batchNo: String? = "" (Correct Approach)
    var batchNo= "" (Will Get Error)
    

    在这里,我尝试使用服务调用获取batchNo。

    这是毫无疑问的。请制定一个以获得帮助。错误不是警告,警告不是错误。添加!!可能会导致NullPointerException,这仅仅是因为您在运行时断言它在实际为空时是非空的。@ezaspi,同意您的说法。我将添加一个
    案例。在过去我设置
    看到运行时崩溃,NPE可能会发生。我们刚刚完成了从Android到Kotlin的大型重构和那些讨厌的!!比以前可能存在的空值更糟糕。例如,在Android中对方法abc(String-somevalue)的调用被转换成Kotlin(通过转换器)和abc(somevalue:String!!)。转换前,abc处理空值,但转换后立即抛出NPE。有人可能会说,我们本应该有一个@Nullable,但这是一个大型项目,因此没有将它们全部包含在内。只需要其中一个就可以使应用程序崩溃。顺便说一句,如果它只是我们的代码,就不会那么糟糕了。但是很多Android覆盖没有@Nullable注释。因此,在自动转换器完成后,代码可能会选择以下内容:
    override(父视图:AdapterView,selectedItemView:View,position:Int,id:Long)
    ,但它应该是一个可为空的视图?像这样经常crashes@ezaspi,我完全同意你的看法,也曾多次面对这些问题。这是自动转换器的一个缺点。很抱歉,我在一年前开始学习Kotlin时写下了这个答案。是的,它经常发生在不使用
    @Nullable
    注释的旧Java类中。Kotlin转换工具不知道如何识别这个参数并猜测它不是null(这是一个错误)。在Swift中,如果你从Objective-C转换,它会猜测它可能为零。对我来说是有效的。谢谢