为Android中的每个用户显示Firebase的课程数据

时间:2018-12-08 15:57:18

标签: android firebase firebase-realtime-database

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.activity_course_fragment, null);

    textView=v.findViewById(R.id.list);

    final  DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    Query usersQuery = rootRef.child("Users").orderByChild("name").equalTo("ANAND");


    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(final DataSnapshot ds : dataSnapshot.getChildren()) {
                String course = ds.child("course").getValue(String.class);
                Log.d(TAG, course);


                Query courseRef = rootRef.child("Course").orderByChild("name").equalTo(course);
                ValueEventListener eventListener = new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot ds : dataSnapshot.getChildren()) {
                            String name = ds.child("name").getValue(String.class);
                            final String url = ds.child("url").getValue(String.class);
                            Log.d(TAG, name + " / " + url);
                            textView.setText(name);
                            textView.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    Intent intent = new Intent(Intent.ACTION_VIEW);
                                    intent.setData(Uri.parse(url));
                                    startActivity(intent);

                                }
                            });
                        }


                    }

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

            }
        }

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

此代码运行良好,但是当我再次重新安装此代码时,它无法根据我的需要运行。我实际上需要为每个用户显示他们注册的特定课程。但是这里只显示“ ANAND”课程。我该如何解决这个问题?

My Database

1 个答案:

答案 0 :(得分:1)

鉴于您以Query usersQuery = rootRef.child("Users").orderByChild("name").equalTo("ANAND");开头,因此仅显示ANAND的课程是有意义的。

要向所有用户显示相同内容,请删除您的条件:

Query usersQuery = rootRef.child("Users");

如果您其余的代码已经可以使用,它将继续使用此更改。