Как получить метку времени из базы данных Firebase Realtime и показать ее в виде текста в виде даты - PullRequest
0 голосов
/ 21 апреля 2020

Я могу сгенерировать временную метку и сохранить ее в базе данных Firebase Realtime. Но не могу понять, как мне ее извлечь и показать в виде текста. Я знаю, что оно извлекается как длинное значение и сохраняется как карта. Я также создал следующее в своем классе модели, но не знаю, что делать дальше.

private Map<String, String> timestamp;

Код для отправки сообщений

    private void sendMessage(String sender, final String receiver, String message) {

        if (sender.equals(receiver)){
            Toast.makeText(MessageActivity.this,"Message Can't be sent",Toast.LENGTH_SHORT).show();
        }
        else {

            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("sender", sender);
            hashMap.put("receiver", receiver);
            hashMap.put("message", message);
            hashMap.put("timestamp", ServerValue.TIMESTAMP);
            hashMap.put("isseen", false);


            DatabaseReference Chatreference = FirebaseDatabase.getInstance().getReference("Chats");

            Key = Chatreference.child(ChatKey).push().getKey();
            Chatreference.child(ChatKey).child(Key).setValue(hashMap);
}

Код для чтения сообщений

private void readMessages(String myid, String userid, String imageurl) {

    mChat = new ArrayList<>();

    Chatreference = FirebaseDatabase.getInstance().getReference("Chats").child(ChatKey);


    Chatreference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Chat chat = dataSnapshot.getValue(Chat.class);
            if (chat.getReceiver().equals(myid) && chat.getSender().equals(userid) ||
                    chat.getReceiver().equals(userid) && chat.getSender().equals(myid)) {
                chat.setMessageId(dataSnapshot.getKey());
                mChat.add(chat);
                Log.d(TAG, "Child_Event_Listener_Called");
                Log.d(TAG, "msg " + chat.getMessage());
            }

            messageAdapter = new MessageAdapter(MessageActivity.this, mChat, imageurl);
            recyclerView.setAdapter(messageAdapter);
            messageAdapter.notifyDataSetChanged();


        }


        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {


        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            Chat chat = dataSnapshot.getValue(Chat.class);
            chat.setMessageId(dataSnapshot.getKey());

            mChat.remove(chat);
            messageAdapter.notifyDataSetChanged();


        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }

    });

}

Обновление класса модели

    public class Chat {
    private String sender;
    private String receiver;
    private  String message;
    private boolean isseen;
    private Map<String, String> timestamp;
    String MessageId;


    public Chat(String sender, String receiver, String message, boolean isseen, Map<String, String> timestamp) {
        this.sender = sender;
        this.receiver = receiver;
        this.message = message;
        this.isseen = isseen;
        this.timestamp = timestamp;
    }

    public Chat() {
    }

    public String getSender() {
        return sender;
    }

    public void setSender(String sender) {
        this.sender = sender;
    }

    public String getReceiver() {
        return receiver;
    }

    public void setReceiver(String receiver) {
        this.receiver = receiver;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessageId() {
        return MessageId;
    }

    public void setMessageId(String messageId) {
        MessageId = messageId;
    }

    public boolean isIsseen() {
        return isseen;
    }

    public void setIsseen(boolean isseen) {
        this.isseen = isseen;
    }

    public Map<String, String> getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Map<String, String> timestamp) {
        this.timestamp = timestamp;
    }

    @Override
    public boolean equals(@Nullable Object obj) {
        if(obj instanceof Chat){
            Chat chat=(Chat) obj;
            return this.MessageId.equals(chat.getMessageId());}
        else
            return false;
    }
}

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Во-первых, отметка времени - это длинное значение, а не карта. Вы должны изменить в классе чата

//...
private boolean isseen;
private long timestamp;
String MessageId;
//...

Затем вы можете преобразовать отметку времени в строку даты следующим образом:

public static  String longToDateString(long timestamp, String format){
    return DateFormat.format(format,new Date(timestamp)).toString();
}

Используя

String date = longToDateString(mChat.get(position).getTimestamp, "dd.MM.yyyyy");

или

String time = longToDateString(mChat.get(position).getTimestamp, "HH:mm");
1 голос
/ 21 апреля 2020

То, что вы хотите, это прочитать child в FirebaseDatabase. Ниже приведен пример того, как читать дочерний элемент через snapshot, который вы получите из firebase. Модель здесь другая, так как в вашей базе данных будет другая структура No Sql.

var userId = firebase.auth().currentUser.uid;
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) {
  var username = (snapshot.val() && snapshot.val().username) || 'Anonymous';
  // ...
});

Кроме того, значение, возвращаемое из базы данных, может быть long или String на основе тип данных, в котором вы будете хранить свою метку времени. Похоже, что он отправляется в виде String.

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