В том же приложении я использую следующие функции для обработки пользовательского ввода. Первый работает без проблем, а второй выдает исключение. Что мне не хватает?
Это вывод logcat:
Process: com.example.barkod okuyucu, PID: 9955
java.lang.NumberFormatException: Invalid long: "9786257901444"
at java.lang.Long.invalidLong(Long.java:124)
at java.lang.Long.parse(Long.java:361)
at java.lang.Long.parseLong(Long.java:352)
at java.lang.Long.parseLong(Long.java:318)
MainActivity2.kt (работает без ошибок):
var barkod = intent.getStringExtra("m1")
binding.textView2.text = barkod.toString()
val context = this
var db = DataBaseHelper(context)
binding.button2.setOnClickListener {
var etadi = binding.editTextText.text
var etsnkullanmatrh = binding.editTextNumber.text
var etadet = binding.editTextNumber2.text
var etbarkod = binding.textView2.text
if (etadi.isNotEmpty() && etsnkullanmatrh.isNotEmpty()) {
var kullanici = Kullanici(etadi, etbarkod.toLong(), etsnkullanmatrh.toInt(), etadet.toInt())
db.insertData(kullanici)
} else {
Toast.makeText(applicationContext, "lutfen", Toast.LENGTH_LONG).show()
}
}
MainActivity3.kt (выдает ошибку):
var barkod = intent.getStringExtra("n1")
binding.textView3.text = barkod
val context = this
var db = DataBaseHelper(context)
binding.button3.setOnClickListener {
var etadi = binding.editTextText2.text
var etsnkullanmatrh = binding.textView5.text
var etadet = binding.editTextNumber4.text
var etbarkod = binding.textView3.text
if (etadi.isNotEmpty() && etsnkullanmatrh.isNotEmpty()) {
var kullanici = Kullanici(etadi, etbarkod.toLong(), etsnkullanmatrh.toInt(), etadet.toInt())
db.insertData(kullanici)
} else {
Toast.makeText(applicationContext, "lutfen", Toast.LENGTH_LONG).show()
}
}
я понимаю, приму к сведению. к тому же коды уже те же самые. Я спрашиваю, почему он делает ошибки на другом, когда уже работает на одном.
Судя по журналу, после числа есть новая строка. Функция toLong() не принимает символы новой строки, только цифры. Но я не уверен, почему один фрагмент кода работает, а другой нет.
Пара вещей: используйте правильное форматирование кода (просто нажмите Ctrl+L в Android Studio, и он сделает это за вас). Это помогает вам во многих случаях, поскольку правильно визуализирует поток управления. Кроме того, по возможности используйте val вместо var, поскольку это предотвращает случайное изменение ваших данных, если вы не собираетесь их изменять.
Наконец, на ваш вопрос: я пытался воспроизвести его с помощью предоставленной вами входной строки, но не могу воспроизвести исключение. Поэтому, пожалуйста, отредактируйте свой вопрос и включите подробную информацию о том, что вы делали в приложении, чтобы вызвать исключение (вы нажимали Enter на клавиатуре?) Альтернативно, установите точку останова на строке, которая вызывает исключение, и посмотрите на строку в отладчике. Содержит ли он невидимые символы?
@vatbub в исходном журнале выглядело так, как будто после числовой строки была новая строка, что, вероятно, и вызвало ошибку. К сожалению, вы отредактировали вопрос и удалили эту новую строку.
@ k314159 Не стесняйтесь просматривать историю изменений. Я старался не редактировать вывод logcat, а только код Kotlin и описание вокруг него. Я даже скопировал строку, упомянутую в выводе logcat, перед редактированием вопроса, чтобы убедиться, что в ней нет странного символа, но все равно не смог воспроизвести исключение.
@ k314159 Согласно истории изменений, новая строка была отредактирована самим Сезаром.
@k314159 И это также объясняет, почему я больше не могу это воспроизвести...
@k314159 k314159 я сделал это. Спасибо за Ваш интерес.
@vatbub я сделал это. Спасибо за Ваш интерес.
Вы отредактировали его из фрагмента кода, но, похоже, в строке, которую вы пытались преобразовать в длинную, была новая строка. Если вы хотите прочитать числа из многострочного ввода, вы можете избежать этой ошибки, обрезав текст перед преобразованием.
var kullanici = Kullanici(
etadi,
etbarkod.trim().toLong(),
etsnkullanmatrh.trim().toInt(),
etadet.trim().toInt())
Я поступил с этим очень похоже на ваш. Спасибо за Ваш интерес.
Публикуя код, отформатируйте его правильно, следуя рекомендациям по отступам из Руководства по стилю Android, чтобы люди могли лучше понять ваш код и ваш вопрос. В противном случае им будет сложно вам ответить. Кроме того, публикуя два примера кода, которые выглядят почти одинаково, объясните, в чем заключаются существенные различия. В этом случае строка, по которой вы вызываете
toLong(), недействительна. Проверьте точное содержимое строки, особенно если она содержит пробелы.