适用于Android的Firebase数据库,将地图数据作为字符串返回

时间:2018-04-27 05:38:59

标签: java android database firebase

因此,对于我的项目,我将服务器时间戳发送到Firebase,然后立即检索它以转换为字符串,以用作用户创建对象的唯一标识符。

数据嵌套在Timestamps/UserID/[this is where the timestamp is]

问题在于,在检索数据时,您无法在addValueEventListener上将地图对象添加为子(),因此我无法检索用户的唯一ID而不是时间戳。

这将返回以下内容:

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 :(得分:1)

:readonly => true对象包含。首先,您必须获得该值,然后才能调用DataSnapshot。这下面的行就可以了......

toString()

答案 1 :(得分:0)

不要直接在快照上调用toString()。使用getValue()

在快照中包含的值上调用它
String timestampString = dataSnapshot.getValue().toString();