База данных Firebase для Android, возвращает данные карты в виде строки - PullRequest
0 голосов
/ 27 апреля 2018

Итак, для моего проекта я отправляю метку времени сервера в Firebase, а затем немедленно извлекаю ее для преобразования в строку, чтобы использовать в качестве уникального идентификатора для созданных пользователем объектов.

Данные вложены в Timestamps/UserID/[this is where the timestamp is]

Проблема в том, что при извлечении данных вы не можете добавить объект карты как child () в addValueEventListener, поэтому я застрял с получением уникального идентификатора пользователя вместо отметки времени.

Это возвращает что-то вроде:

DataSnapshot{key = [User's Unique ID], value = [timestamp i'm trying to isolate]}

Вместо того, чтобы восстановить все тарабарщины, я просто хочу отметку времени.

Вот код, заранее спасибо.

    public void createFlat(){

    /////WRITE TIMESTAMP VALUE TO SERVER UNDER TEMP NODE/////
    final Map timestampMap = ServerValue.TIMESTAMP;


    FirebaseDatabase.getInstance().getReference("Timestamps")
            .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
            .setValue(timestampMap)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(task.isSuccessful()){
                        Toast.makeText(getApplicationContext(),"timestamp written",Toast.LENGTH_SHORT).show();

                        /////RETRIEVE TIMESTAMP FROM SERVER AND CONVERT IT TO A STRING/////
                        final FirebaseDatabase database = FirebaseDatabase.getInstance();
                        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

                        DatabaseReference ref = database.getReference("Timestamps").child(uid); //here is the issue, can't add child(timestampMap)

                                ref.addValueEventListener(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(DataSnapshot dataSnapshot) {
                                        String timestampString = dataSnapshot.toString();
                                        textView2.setText(timestampString);
                                    }

                                    @Override
                                    public void onCancelled(DatabaseError databaseError) {
                                        Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_SHORT).show();
                                    }
                                });

                    }else{
                        Toast.makeText(getApplicationContext(),task.getException().getMessage(),Toast.LENGTH_SHORT).show();
                    }
                }
            });

}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

DataSnapshot объект содержит ключ и значение . Сначала вы должны получить значение, и только после этого вы можете позвонить toString(). Эта строка будет делать ...

String timestampString = dataSnapshot.getValue().toString();
0 голосов
/ 27 апреля 2018

Не вызывайте toString() прямо на снимке. Вызовите его для значения, содержащегося в снимке, используя getValue () :

String timestampString = dataSnapshot.getValue().toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...