web-dev-qa-db-ja.com

IllegalArgumentException:null以外として指定されたパラメーターはnull

私は次の実行時エラーを取得しています:

 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()
}

関数呼び出しは無効のようです。ただし、この問題を解決する方法がわかりません。私が見逃したコトリン固有のものはありますか?

39
A Maharaja

例外はかなり明確です。パラメーターにnullを渡します。

デフォルトでは、Kotlinのすべての変数とパラメーターは非ヌルです。メソッドにnullパラメーターを渡したい場合は、そのタイプに?を追加する必要があります。次に例を示します。

fun fetchMerchantHashes(intent: Intent?)

詳細情報: null-safety

82

私の場合、このエラーはprobable nullをパラメーターとして渡すことについて警告していました。修正の3つの方法。

  1. 対応する場所でパラメータのタイプを変更します。 Javaから受け取った場合は、@NonNullアノテーションを変数定義に追加します。
  2. !!をメソッドの引数に追加します。
  3. ?をKotlinクラスのパラメーターに追加します。 Javaクラスで注釈が使用されていない場合(@Nullable@NonNullなど)、Kotlin変換ツールはデフォルトでこれを行う可能性があると思います。
1
CoolMind

Java St​​udio変換ツールを使用して、アクティビティをAndroidからKotlinに変換した後、同様の例外をキャッチしました。だから、override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent)を得たのです

そうですoverride fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)

intent: Intent?の違い

0
askarsyzdykov

単純な答えは確かに機能します... Rest Client(Web Services呼び出し)(GETまたはPOST)を使用してサーバーからデータをフェッチし、json応答にnullパラメーター値がある可能性があり、パラメータとtextviewに追加すると、このエラーが発生します。

解決策:単に追加しますか?以下のように変数にマークします。

例:

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

ここでは、サービスコールを使用してbatchNoを取得しようとしています。