Правильный вывод / значение при отладке и ноль при нормальном выполнении? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть приложение чата, в котором я в настоящее время внедряю систему последнего просмотра / присутствия.Я храню онлайн-статус в базе данных Firebase Realtime.Если пользователь в сети, тогда значение этого ключа будет логическим true, в противном случае это будет ServerValue.TIMESTAMP, когда пользователь закрыл приложение.

Я использую addValueEventListener() для прослушивания значения всякий раз, когда оно изменяется.Логика здесь в том, что если это значение не является логическим, то пользователь находится в автономном режиме, и в этом случае я вызываю метод getTimeAgo(long time).Проблема в том, что по какой-то причине переменная lastSeen получит значение null, когда приложение будет работать нормально, но в тот момент, когда я использую отладчик, чтобы точно определить, почему он возвращает ноль, он выполняется правильно?Я очень долго пытался это исправить и в конце концов сдался.Есть идеи?

public static String getTimeAgo(long time) {

    final int SECOND_MILLIS = 1000;
    final int MINUTE_MILLIS = 60 * SECOND_MILLIS;
    final int HOUR_MILLIS = 60 * MINUTE_MILLIS;
    final int DAY_MILLIS = 24 * HOUR_MILLIS;

    if (time < 1000000000000L) {
        // if timestamp given in seconds, convert to millis
        time *= 1000;
    }

    long now = System.currentTimeMillis();
    if (time > now || time <= 0) {
        return null;
    }

    final long diff = now - time;
    if (diff < MINUTE_MILLIS) {
        return "just now";
    } else if (diff < 2 * MINUTE_MILLIS) {
        return "a minute ago";
    } else if (diff < 50 * MINUTE_MILLIS) {
        return diff / MINUTE_MILLIS + " minutes ago";
    } else if (diff < 90 * MINUTE_MILLIS) {
        return "an hour ago";
    } else if (diff < 24 * HOUR_MILLIS) {
        return diff / HOUR_MILLIS + " hours ago";
    } else if (diff < 48 * HOUR_MILLIS) {
        return "yesterday";
    } else {
        return diff / DAY_MILLIS + " days ago";
    }
}

FirebaseDatabase.getInstance().getReference().child("users/" + bundle.getString("uid") + "/online").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        String lastSeen;
        if (dataSnapshot.getValue() instanceof Boolean)
            lastSeen = "online";
        else
            lastSeen = getTimeAgo((long) dataSnapshot.getValue());
        nameAndStatus.setText(TextUtils.concat(name, "\n", lastSeen));
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Toast.makeText(PersonalChat.this, "Couldn't get latest online status", Toast.LENGTH_LONG).show();
        Log.w("Personal chat", databaseError.getMessage(), databaseError.toException());
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...