我想从某个键获取所有子项时出现数据检索错误

时间:2019-04-29 04:39:24

标签: java android firebase-realtime-database

我想通过 getchild()函数从父级子级中读取某些特定的子级,但这将无法正常工作。

enter image description here

FirebaseUser FUser = mAuth.getCurrentUser();
            String userid = FUser.getUid();

            DatabaseReference DR;
            DR = FirebaseDatabase.getInstance().getReference().child("HistoryTable").child(userid);
            DR.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                   // Iterable<DataSnapshot> root = dataSnapshot.getChildren();
                  //  Toast.makeText(getApplicationContext(), "ds "+dataSnapshot.getChildren(),Toast.LENGTH_LONG).show();
                    for (DataSnapshot ds: dataSnapshot.getChildren()) {
                 //       Toast.makeText(getApplicationContext(), "ds "+ds,Toast.LENGTH_LONG).show();

                        for (DataSnapshot d: ds.getChildren()) {

                            String Height = d.getKey() + d.getValue() + "\n".toString();
                            String ch =  d.child("1Height:").getValue(String.class);

                           // tv.append(Height);
                            tv.append(ch);


                        }
                    }


                }

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

                }

            });

我想从每个键中得到这四个孩子。

3 个答案:

答案 0 :(得分:0)

您必须在参考中添加您的推送ID:-

DR = FirebaseDatabase.getInstance().getReference().child("HistoryTable").child(userid).child("push id");
            DR.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                   // Iterable<DataSnapshot> root = dataSnapshot.getChildren();
                  //  Toast.makeText(getApplicationContext(), "ds "+dataSnapshot.getChildren(),Toast.LENGTH_LONG).show();
                    for (DataSnapshot ds: dataSnapshot.getChildren()) {
                 //       Toast.makeText(getApplicationContext(), "ds "+ds,Toast.LENGTH_LONG).show();

                        for (DataSnapshot d: ds.getChildren()) {

                            String Height = d.getKey() + d.getValue() + "\n".toString();
                            String ch =  d.child("1Height:").getValue(String.class);

                           // tv.append(Height);
                            tv.append(ch);


                        }
                    }


                }

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

                }

            });

答案 1 :(得分:0)

如果只想读取该值,请尝试这样。如果您只想读取一次数据,请使用@Override public void onBackPressed() { editor.putString("present", etPresent.getText().toString()); editor.putString("details", etDetails.getText().toString()); editor.putString("benefit", etBenefit.getText().toString()); editor.apply(); super.onBackPressed(); }

*尝试按对象结构https://firebase.google.com/docs/database/android/read-and-write#basic_write读取值

addListenerForSingleValueEvent()

答案 2 :(得分:0)

要获取您的4UserId属性的值,只需使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("HistoryTable").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String userId = ds.child("4UserId").getValue(String.class);
            Log.d(TAG, userId);
        }
    }

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

您的logcat中的结果将是:

2Wwrjx...P2obFO83