无法按孩子的顺序过滤Firebase数据

时间:2017-01-08 05:23:47

标签: android android-fragments firebase firebase-realtime-database firebaseui

我想显示由userID过滤的Firebase数据。但应用程序崩溃并在调试后在Firebase适配器上显示NullPointerException。该怎么办?我正在片段中实现它。我没有粘贴导入的库。

这是我的代码:

public class MyPosts extends Fragment{


    private RecyclerView postList;
    private DatabaseReference mDatabase;
    private DatabaseReference mDatabaseAppriciate;
    private DatabaseReference mDatabaseDisgrace;
    private LinearLayoutManager layoutManager;
    private FirebaseAuth mAuth= FirebaseAuth.getInstance();
    private DatabaseReference mDatabaseCurrentUser;
    public Query mQueryCurrentUser=null;

    //private static final String TAG = "MyActivity";

    private boolean mProcessAppriciate=false;
    private boolean mProcessDisgrace=false;



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        super.onSaveInstanceState(savedInstanceState);
        View rootView = inflater.inflate(R.layout.allposts, container, false);



        mDatabase= FirebaseDatabase.getInstance().getReference().child("Posts");
        mDatabaseAppriciate=FirebaseDatabase.getInstance().getReference().child("Appriciate");
        mDatabaseDisgrace=FirebaseDatabase.getInstance().getReference().child("Disgrace");

        mDatabase.keepSynced(true);
        mDatabaseAppriciate.keepSynced(true);
        mDatabaseDisgrace.keepSynced(true);




        //EXPERIMENT WITH LISTVIEW STARTS
        postList=(RecyclerView) rootView.findViewById(R.id.postList);
        postList.setHasFixedSize(true);
        layoutManager=new LinearLayoutManager(getActivity());
        layoutManager.setReverseLayout(true);
        postList.setHasFixedSize(true);
        postList.setLayoutManager(layoutManager);


        postList.getRecycledViewPool().clear();




        //EXPERIMENT WITH LISTVIEW ENDS
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();

        //EXP CODE STARTS

        FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in

                    mDatabaseCurrentUser=FirebaseDatabase.getInstance().getReference().child("Posts");

                    String currentUserId=user.getUid();

                    mQueryCurrentUser=mDatabaseCurrentUser.orderByChild("uid").equalTo(currentUserId);


                }else{

                }
            }

        });

        //EXP CODE ENDS

        FirebaseRecyclerAdapter<Posts,PostViewHolder> firebaseRecyclerAdapter= new FirebaseRecyclerAdapter<Posts,PostViewHolder>(

                Posts.class,
                R.layout.single_post,
                PostViewHolder.class,
                mQueryCurrentUser

        ) {

            @Override
            protected void populateViewHolder(final PostViewHolder viewHolder, final Posts model, final int position) {

                final String post_key=getRef(position).getKey();


                viewHolder.setTitle(model.getTitle());
                viewHolder.setDescription(model.getDescription());
                viewHolder.setProfileName(model.getProfilename());
                viewHolder.setImage(getContext(),model.getImage());
                viewHolder.getLayoutPosition();
                viewHolder.setAppriciateButton(post_key);
                viewHolder.setDisgraceButton(post_key);



                //Share click code below
                viewHolder.Share.setOnClickListener(new View.OnClickListener() {

                    CallbackManager callbackManager;
                    ShareDialog shareDialog;
                    @Override
                    public void onClick(View v) {

                        FacebookSdk.sdkInitialize(getApplicationContext());
                        callbackManager = CallbackManager.Factory.create();
                        shareDialog = new ShareDialog(MyPosts.this);
                        if (ShareDialog.canShow(ShareLinkContent.class)) {


                            ShareLinkContent content = new ShareLinkContent.Builder()
                                    .setContentTitle(model.getTitle())
                                    .setContentDescription(model.getDescription())
                                    .setImageUrl(Uri.parse(model.getImage()))
                                    .setContentUrl(Uri.parse("https://developers.facebook.com"))
                                    .build();
                            shareDialog.show(content);

                            shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
                                @Override
                                public void onSuccess(Sharer.Result result) {

                                }

                                @Override
                                public void onCancel() {

                                }

                                @Override
                                public void onError(FacebookException error) {

                                }
                            });
                        }
                    }

                });




                //Share click code ends above
                //Appriciate button on click event below

                viewHolder.Appriciate.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mProcessAppriciate=true;



                        mDatabaseAppriciate.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                if (mProcessAppriciate) {

                                    if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {
                                        mDatabaseAppriciate.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();

                                        mProcessAppriciate = false;

                                    }else {
                                        mDatabaseAppriciate.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue(mAuth.getCurrentUser().getDisplayName());

                                        mProcessAppriciate = false;

                                    }
                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                            }
                        });
                    }
                });


                //Appriciate button click event CODE ENDS


                //Disgrace Button Click Event Code Starts
                viewHolder.Disgrace.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mProcessDisgrace=true;



                        mDatabaseDisgrace.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                if (mProcessDisgrace) {

                                    if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {
                                        mDatabaseDisgrace.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();

                                        mProcessDisgrace = false;

                                    } else {
                                        mDatabaseDisgrace.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue(mAuth.getCurrentUser().getDisplayName());

                                        mProcessDisgrace = false;


                                    }

                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {

                            }
                        });

                    }

                });

                //Disgrace Button Click code Ends

            }

        };

        postList.setAdapter(firebaseRecyclerAdapter);


        //test code
        firebaseRecyclerAdapter.notifyDataSetChanged();

    }


    public static class PostViewHolder extends RecyclerView.ViewHolder{

        View mView;
        Button Appriciate;
        Button Disgrace;
        Button Share;
        DatabaseReference mDatabaseAppriciate;
        DatabaseReference mDatabaseDisgrace;
        FirebaseAuth mAuth;




        public PostViewHolder(View itemView) {
            super(itemView);
            mView=itemView;
            Appriciate=(Button) mView.findViewById(R.id.appriciate);
            Disgrace=(Button) mView.findViewById(R.id.disgraceful);
            Share=(Button) mView.findViewById(R.id.share);


            mDatabaseAppriciate=FirebaseDatabase.getInstance().getReference().child("Appriciate");
            mDatabaseDisgrace=FirebaseDatabase.getInstance().getReference().child("Disgrace");
            mAuth=FirebaseAuth.getInstance();
            mDatabaseAppriciate.keepSynced(true);
            mDatabaseDisgrace.keepSynced(true);


        }

        public void setAppriciateButton(final String post_key){

            mDatabaseAppriciate.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){
                        Appriciate.setBackgroundColor(Color.GRAY);
                        Appriciate.setText("Appriciated");

                    }else{
                        Appriciate.setBackgroundColor(Color.GREEN);
                        Appriciate.setText("APPRICIATE");
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }

        //SET DISGRACE BUTTON CODE BELOW
        public void setDisgraceButton(final String post_key){

            mDatabaseDisgrace.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){
                        Disgrace.setBackgroundColor(Color.GRAY);
                        Disgrace.setText("Disgraced");

                    }else{
                        Disgrace.setBackgroundColor(Color.RED);

                        Disgrace.setText("DISGRACE");
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }

        //SET DISGRACE BUTTON CODE ENDS

        //Setting the title to the AllActivity
        public void setTitle(String title){
            TextView postTitle=(TextView) mView.findViewById(R.id.allPostTitle);
            postTitle.setText(title);

        }

        public void setDescription(String description){
            TextView postDescription=(TextView) mView.findViewById(R.id.allPostDescription);
            postDescription.setText(description);
        }
        //PROFILE NAME EXPERIMENT

        public void setProfileName(String profilename){
            TextView postName=(TextView) mView.findViewById(R.id.profileName);
            postName.setText(profilename);
        }




        public void setImage(final Context context, final String image) {
            final ImageView postImage=(ImageView) mView.findViewById(R.id.allPostImage);
            with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(postImage, new Callback() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onError() {



                    Picasso.with(context).load(image).resize(500,700).into(postImage);

                }
            });

    }


    //THREADING EXPERIMENT CODE

    }


}

0 个答案:

没有答案