Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与安卓系统中使用Firebase的Likes计数器混淆_Java_Android_Firebase_Posts_Social Likes - Fatal编程技术网

Java 与安卓系统中使用Firebase的Likes计数器混淆

Java 与安卓系统中使用Firebase的Likes计数器混淆,java,android,firebase,posts,social-likes,Java,Android,Firebase,Posts,Social Likes,我是一名初学者,正在从事一个android项目,用户喜欢管理员为他们发布的帖子。当用户单击like按钮时,like将更新为firebase。问题是,即使用户喜欢或不喜欢该帖子,喜欢的数量也在增加。请调查一下 注意: Log.d(TAG, "Liked onDataChange: "+isLiked); @Override public void onLike(View v, int position) { Uploa

我是一名初学者,正在从事一个android项目,用户喜欢管理员为他们发布的帖子。当用户单击like按钮时,like将更新为firebase。问题是,即使用户喜欢或不喜欢该帖子,喜欢的数量也在增加。请调查一下

注意:

Log.d(TAG, "Liked onDataChange: "+isLiked);
        @Override
        public void onLike(View v, int position) {

            UploadImage selectedItem = mUploads.get(position);
            String selectedKey = selectedItem.getKey();
            final ShineButton shineButton = new ShineButton(Objects.requireNonNull(getActivity()));
            shineButton.setBtnFillColor(RED);
            shineButton.setShapeResource(R.raw.heart);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100,100);
            shineButton.setLayoutParams(layoutParams);



            final DatabaseReference likesRef = FirebaseDatabase.getInstance().getReference().child("ImageUploads").child(selectedKey).child("likes");
            likesRef.addListenerForSingleValueEvent(new ValueEventListener(){
                @Override
                public void onDataChange(@NotNull DataSnapshot dataSnapshot) {
                    long numLikes = 0;
                    if(dataSnapshot.exists()){
                        numLikes = dataSnapshot.getValue(Long.class);
                    }
                    boolean isLiked = shineButton.isSelected();

                    Log.d(TAG, "Liked onDataChange: "+isLiked);
                    if(isLiked){
                        //If already liked then user wants to unlike the post

                        likesRef.setValue(numLikes-1);

                    }else {
                        //If not liked already then user wants to like the post
                        likesRef.setValue(numLikes+1);
                        shineButton.setEnabled(false);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            ShineButton like  =  layout.findViewById(R.id.like_feed);
            System.out.println(RED);
            like.setBackground(getResources().getDrawable(R.drawable.like_feed_bg));

        }
            public void onLike(View v, int position) {

            UploadImage selectedItem = mUploads.get(position);
            String selectedKey = selectedItem.getKey();
            final ShineButton shineButton = new ShineButton(Objects.requireNonNull(getActivity()));
            shineButton.setBtnFillColor(RED);
            shineButton.setShapeResource(R.raw.heart);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100,100);
            shineButton.setLayoutParams(layoutParams);

            final DatabaseReference likesRef = FirebaseDatabase.getInstance().getReference().child("ImageUploads").child(selectedKey).child("likes");
            likesRef.addListenerForSingleValueEvent(new ValueEventListener(){
                @Override
                public void onDataChange(@NotNull final DataSnapshot dataSnapshot) {
                    long numLikes = 0;

                    if(dataSnapshot.exists()){
                        numLikes = dataSnapshot.getValue(Long.class);
                    }

                    final long finalNumLikes = numLikes;

                    shineButton.setOnCheckStateChangeListener(new ShineButton.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(View view, boolean checked) {


                            if (checked){
                                likesRef.setValue(finalNumLikes-1);
                            }
                            else{
                                likesRef.setValue(finalNumLikes+1);
                            }
                        }
                    });

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            ShineButton like  =  layout.findViewById(R.id.like_feed);
            System.out.println(RED);
            like.setBackground(getResources().getDrawable(R.drawable.like_feed_bg));

        }
无论我们喜欢还是不喜欢shinebutton,返回false。Shinebutton是一个图书馆

链接到其GitHub:

onLike方法:

Log.d(TAG, "Liked onDataChange: "+isLiked);
        @Override
        public void onLike(View v, int position) {

            UploadImage selectedItem = mUploads.get(position);
            String selectedKey = selectedItem.getKey();
            final ShineButton shineButton = new ShineButton(Objects.requireNonNull(getActivity()));
            shineButton.setBtnFillColor(RED);
            shineButton.setShapeResource(R.raw.heart);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100,100);
            shineButton.setLayoutParams(layoutParams);



            final DatabaseReference likesRef = FirebaseDatabase.getInstance().getReference().child("ImageUploads").child(selectedKey).child("likes");
            likesRef.addListenerForSingleValueEvent(new ValueEventListener(){
                @Override
                public void onDataChange(@NotNull DataSnapshot dataSnapshot) {
                    long numLikes = 0;
                    if(dataSnapshot.exists()){
                        numLikes = dataSnapshot.getValue(Long.class);
                    }
                    boolean isLiked = shineButton.isSelected();

                    Log.d(TAG, "Liked onDataChange: "+isLiked);
                    if(isLiked){
                        //If already liked then user wants to unlike the post

                        likesRef.setValue(numLikes-1);

                    }else {
                        //If not liked already then user wants to like the post
                        likesRef.setValue(numLikes+1);
                        shineButton.setEnabled(false);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            ShineButton like  =  layout.findViewById(R.id.like_feed);
            System.out.println(RED);
            like.setBackground(getResources().getDrawable(R.drawable.like_feed_bg));

        }
            public void onLike(View v, int position) {

            UploadImage selectedItem = mUploads.get(position);
            String selectedKey = selectedItem.getKey();
            final ShineButton shineButton = new ShineButton(Objects.requireNonNull(getActivity()));
            shineButton.setBtnFillColor(RED);
            shineButton.setShapeResource(R.raw.heart);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100,100);
            shineButton.setLayoutParams(layoutParams);

            final DatabaseReference likesRef = FirebaseDatabase.getInstance().getReference().child("ImageUploads").child(selectedKey).child("likes");
            likesRef.addListenerForSingleValueEvent(new ValueEventListener(){
                @Override
                public void onDataChange(@NotNull final DataSnapshot dataSnapshot) {
                    long numLikes = 0;

                    if(dataSnapshot.exists()){
                        numLikes = dataSnapshot.getValue(Long.class);
                    }

                    final long finalNumLikes = numLikes;

                    shineButton.setOnCheckStateChangeListener(new ShineButton.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(View view, boolean checked) {


                            if (checked){
                                likesRef.setValue(finalNumLikes-1);
                            }
                            else{
                                likesRef.setValue(finalNumLikes+1);
                            }
                        }
                    });

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            ShineButton like  =  layout.findViewById(R.id.like_feed);
            System.out.println(RED);
            like.setBackground(getResources().getDrawable(R.drawable.like_feed_bg));

        }
修改代码后:现在,不管我们喜欢还是不喜欢,计数都不会增加或减少

Onlike方法:

Log.d(TAG, "Liked onDataChange: "+isLiked);
        @Override
        public void onLike(View v, int position) {

            UploadImage selectedItem = mUploads.get(position);
            String selectedKey = selectedItem.getKey();
            final ShineButton shineButton = new ShineButton(Objects.requireNonNull(getActivity()));
            shineButton.setBtnFillColor(RED);
            shineButton.setShapeResource(R.raw.heart);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100,100);
            shineButton.setLayoutParams(layoutParams);



            final DatabaseReference likesRef = FirebaseDatabase.getInstance().getReference().child("ImageUploads").child(selectedKey).child("likes");
            likesRef.addListenerForSingleValueEvent(new ValueEventListener(){
                @Override
                public void onDataChange(@NotNull DataSnapshot dataSnapshot) {
                    long numLikes = 0;
                    if(dataSnapshot.exists()){
                        numLikes = dataSnapshot.getValue(Long.class);
                    }
                    boolean isLiked = shineButton.isSelected();

                    Log.d(TAG, "Liked onDataChange: "+isLiked);
                    if(isLiked){
                        //If already liked then user wants to unlike the post

                        likesRef.setValue(numLikes-1);

                    }else {
                        //If not liked already then user wants to like the post
                        likesRef.setValue(numLikes+1);
                        shineButton.setEnabled(false);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            ShineButton like  =  layout.findViewById(R.id.like_feed);
            System.out.println(RED);
            like.setBackground(getResources().getDrawable(R.drawable.like_feed_bg));

        }
            public void onLike(View v, int position) {

            UploadImage selectedItem = mUploads.get(position);
            String selectedKey = selectedItem.getKey();
            final ShineButton shineButton = new ShineButton(Objects.requireNonNull(getActivity()));
            shineButton.setBtnFillColor(RED);
            shineButton.setShapeResource(R.raw.heart);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100,100);
            shineButton.setLayoutParams(layoutParams);

            final DatabaseReference likesRef = FirebaseDatabase.getInstance().getReference().child("ImageUploads").child(selectedKey).child("likes");
            likesRef.addListenerForSingleValueEvent(new ValueEventListener(){
                @Override
                public void onDataChange(@NotNull final DataSnapshot dataSnapshot) {
                    long numLikes = 0;

                    if(dataSnapshot.exists()){
                        numLikes = dataSnapshot.getValue(Long.class);
                    }

                    final long finalNumLikes = numLikes;

                    shineButton.setOnCheckStateChangeListener(new ShineButton.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(View view, boolean checked) {


                            if (checked){
                                likesRef.setValue(finalNumLikes-1);
                            }
                            else{
                                likesRef.setValue(finalNumLikes+1);
                            }
                        }
                    });

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            ShineButton like  =  layout.findViewById(R.id.like_feed);
            System.out.println(RED);
            like.setBackground(getResources().getDrawable(R.drawable.like_feed_bg));

        }

问题是您没有检查正在按下的按钮的状态。您可以通过执行以下操作来实现这一点:

替换:

if(islike){
//如果已经喜欢了,那么用户希望不喜欢帖子
likesRef.setValue(numLikes-1);}
否则{
//如果不喜欢已经然后用户想要喜欢的职位
likesRef.setValue(numLikes+1);
shineButton.setEnabled(假);
}
为此:

shineButton.setOnCheckStateChangeListener(新的shineButton.OnCheckedChangeListener(){
@凌驾
已更改公共void(视图,布尔值已选中){
如果(选中){
likesRef.setValue(numLikes+1);
}否则{
likesRef.setValue(numLikes-1);
}
} 
});

当您关闭应用程序时,您还必须保留botton的引用。您可以使用
SharedReferences

来完成此操作,请帮助我。Does
Log.d(标记“Liked onDataChange:”+isLiked)喜欢时返回false?是。。当我们不喜欢它时,它返回false。如果它返回false,那么您将继续添加新的like。如果(!isLiked)
与布尔isLiked=shinebutton.isSelected()不同或相似,请尝试将其更改为
;返回值总是false。怎么办?答案很好,但问题是变量numLikes是在innerclass中访问的。所以我向全球宣布。现在即使我们喜欢或不喜欢这个数字也不是changing@UdayKiran只需制造核弹就行了,最终它就成了定局。然后它也不是增加或减少@HB@UdayKiran你说你让它全球化了,请编辑你的问题并展示它现在是怎样的。我让它全球化了,并尝试了。。它不起作用。然后我做了最后的决定。。它不起作用。我将编辑并发布问题@血红蛋白