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
В моем случае эта ошибка предупреждала о возможной передаче нулевого значения в качестве параметра. Три способа коррекции.
- Измените тип параметра в соответствующем месте. Если он получен из Java, добавьте аннотацию
@NonNull
в определение переменной. - Добавить
!!
к аргументу метода. - Добавить
?
к параметру в классе 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)
Здесь я пытаюсь получить пакетный номер, используя сервисный вызов.