IllegalArgumentException: параметр, заданный как непустой, равен 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()
}

Кажется, что вызов функции недействителен. Однако я не знаю, как решить эту проблему. Есть ли что-то, что я пропустил?

Ответ 1

Исключение довольно ясно: вы передаете null для параметра.

По умолчанию все переменные и параметры в Kotlin не равны нулю. Если вы хотите передать параметр null методу, вы должны добавить к нему тип ?, например:

fun fetchMerchantHashes(intent: Intent?)

Для получения дополнительной информации: null-safety.

Ответ 2

В моем случае эта ошибка предупреждала о возможной передаче нулевого значения в качестве параметра. Три способа коррекции.

  1. Измените тип параметра в соответствующем месте. Если он получен из Java, добавьте аннотацию @NonNull в определение переменной.
  2. Добавить !! к аргументу метода.
  3. Добавить ? к параметру в классе Kotlin. Я думаю, что инструмент преобразования Kotlin мог бы сделать это по умолчанию, если бы в классе Java не использовались аннотации (например, @Nullable, @NonNull).

Ответ 3

Я поймал подобное исключение после преобразования Activity из Java в Kotlin с помощью инструмента конвертации Android Studio. Итак, это то, что я получил override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent)

Правильно override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)

Разница в intent: Intent?

Ответ 4

Простой ответ будет работать наверняка... Когда вы выбираете данные с сервера с помощью Rest Client (вызовы веб-служб) (GET или POST) и если в ответе json может быть нулевое значение параметра, и вы выбираете параметр и добавляете его в текстовое представление, вы получаете это ошибка..

Решение:  просто добавить? пометить переменную, как показано ниже.

Пример:

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

Здесь я пытаюсь получить пакетный номер, используя сервисный вызов.