Невозможно вычесть 2 длинных значения временных меток - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь вычесть два длинных (метка времени), но это продолжало сбой приложения, вот код

//converting timestamp to actual time;
        val calendar = Calendar.getInstance(Locale.ENGLISH)
        calendar.timeInMillis = chat!!.timestamp!!.toLong()

        val t24 = 86400000 //24hrs in milliseconds
        val currentTime = System.currentTimeMillis().toInt()
        val chatTime: Int = chat.timestamp!!.toInt()
        val date = holder.date

        if ((currentTime - chatTime ) < t24 ) {
            val time =
                DateFormat.format("hh:mm aa", calendar).toString()
            date!!.text = time
        }else{

            val time =
                DateFormat.format("dd/MM//yyyy hh:mm aa", calendar).toString()
            date!!.text = time

        }

, и это ошибка

java.lang.NumberFormatException: For input string: "1594502477561"
        at java.lang.Integer.parseInt(Integer.java:618)
        at java.lang.Integer.parseInt(Integer.java:650)
        at com.google.meetchat.Adapters.ChatAdapter.onBindViewHolder(ChatAdapter.kt:64)
        at com.google.meetchat.Adapters.ChatAdapter.onBindViewHolder(ChatAdapter.kt:18)

строка 64 - это то место, где инициализируется переменная chatTIme

1 Ответ

0 голосов
/ 09 июля 2020

Вы используете оператор утверждения ненулевого значения (!!) для некоторых переменных. Он преобразует любое значение в тип ненулевой , а выдает исключение , если значение null .

Я подозреваю, что вы получаете NullPointerException, когда вы используете этот оператор для переменной. Пожалуйста, убедитесь, что эти переменные инициализированы перед использованием для них оператора !!:

chat, chat.timestamp, holder.date

UPDATE:

Используйте Long для отметок времени, не конвертируйте их в Int. Например, замените:

val currentTime = System.currentTimeMillis().toInt()
val chatTime: Int = chat.timestamp!!.toInt()

на:

val currentTime = System.currentTimeMillis()
val chatTime = chat.timestamp!!.toLong()

Это потому, что временные метки представлены в миллисекундах (или секундах, если это Unix timestamp), а значение может быть больше максимального значение типа Int, то есть public const val MAX_VALUE: Int = 2147483647.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...