Android Firebase TIMESTAMP - PullRequest
       4

Android Firebase TIMESTAMP

0 голосов
/ 23 января 2019

Кнопка с onClickListener для публикации TIMESTAMP в дочернем элементе («Дата»)

users.child(user.getUid()).child("Date").setValue(ServerValue.TIMESTAMP);

Работает нормально.

Моя проблема в том, что когда я пытаюсь получить в своем приложении на телефоне, я получаю текущее время, а не фактическое время TIMESTAMP.

 users.child(user.getUid()).child("Date").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Date date=new Date();
                SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault());
                sfd.format(new Date());



                TimeSold.setText(String.valueOf(date));


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });

TIMESTAMP изменяется в Firebase и должен отличаться от пользователя к другому. В моем приложении оно показывает одинаковое текущее время для всех пользователей.

My Firebase

enter image description here

Ответы [ 2 ]

0 голосов
/ 23 января 2019

моя проблема в том, что когда я пытаюсь получить в своем приложении на телефоне, я получаю текущее время, а не фактическое время TIMESTAMP.

Это происходит потому, что внутри обратного вызовавы на самом деле создаете новый Date объект, а не получаете его из базы данных.Чтобы решить эту проблему, используйте следующий метод:

public static String getTimeDate(long timestamp){
    try{
        DateFormat dateFormat = getDateTimeInstance();
        Date netDate = (new Date(timestamp));
        return dateFormat.format(netDate);
    } catch(Exception e) {
        return "date";
    }
}

И следующие строки кода для получения даты из базы данных:

ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        long date = ds.getValue(Long.class);
        Log.d(TAG, getTimeDate(date));
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
users.child(user.getUid()).child("Date").addListenerForSingleValueEvent(valueEventListener);

Редактировать:

Чтобы использовать форматированную дату, используйте следующий метод:

public static String getTimeDate(long timestamp){
    try{
        Date netDate = (new Date(timestamp));
        SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault());
        return sfd.format(netDate);
    } catch(Exception e) {
        return "date";
    }
}
0 голосов
/ 23 января 2019

Если отметка времени сохраняется как значение Long, введите:

Date date = new Date(dataSnapshot.getValue(Long.class));
SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", 
                                    Locale.getDefault());
String text = sfd.format(date);
TimeSold.setText(text);

в onDataChange обратном вызове

Ваше решение не работает, потому что вы передаете текущую дату в формат, как вы записали:

Date date = new Date()

По умолчанию используется местное текущее время.

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