我想为firebase

时间:2017-08-06 10:56:50

标签: android firebase firebase-realtime-database

我想检索类似的计数器,并希望在firebase数据库上传结果。如果另一个用户喜欢这个帖子,那么like计数器应该增加值,而不是从0开始。

这是我的databaseReference看起来像DatabaseLOLCounter.child(post_key).child(mAuth.getCurrentUser().getUid()).child("counter").setValue('like counter value here');

myfirebase数据库结构: This is my firebasedatabase structure

这是我的viewHolder

viewHolder.mLOL.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        processLOL=true;
        DatabaseFacepalm.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();
        DatabaseAngry.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();
        DatabaseNeutral.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();

            DatabaseLOL.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (processLOL)
                        {
                            if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid()))
                            {
                                //Toast.makeText(MainActivity.this,mAuth.getCurrentUser().getUid(),Toast.LENGTH_LONG).show();
                                //if already reacted
                                //DatabaseLOLCounter.setValue(Count = Count - 1 );
                                updateLOLCounter(false,post_key);
                                DatabaseLOL.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();
                                processLOL=false;

                            }
                            else
                            {
                                //if no react
                                updateLOLCounter(true,post_key);
                                //DatabaseLOLCounter.setValue(Count = Count + 1 );
                                DatabaseLOL.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("lol");
                                processLOL=false;
                            }
                        }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

    }
});

我的updateLike计数器看起来像这样(从某处复制)

 private void updateLOLCounter(final boolean increment, final String post_key) {

        DatabaseLOLCounter.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            if (mutableData.getValue() != null) {
                int value = mutableData.getValue(Integer.class);
                if(increment)
                {
                    value++;

                } else {
                    value--;
                }
                mutableData.setValue(value);

            }
            return Transaction.success(mutableData);
        }

现在该怎么办才能在firebase上设置类似的计数器。

继承人面临的新错误: heres the new error im facing

2 个答案:

答案 0 :(得分:0)

您可以使用简单的计数器,但应用程序关闭后,计数器的值将返回0。因此,使用Firebase事务将是更好的选择,因为数据不会因并发更新而损坏。

在OnCreate之前添加此行。

server {
  listen       80;
  listen       443 ssl;
  server_name  _;

  ssl_certificate  /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;

  location / {
    proxy_pass http://api-server:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }

  location /public {
    root /usr/local/var/www;
  }

}

现在在OnClicklistener下添加以下代码。

private Firebase LOLCounter;

Database link example.

答案 1 :(得分:0)

它应该声明为a并且所有firebase客户端必须在

之前提及
<li><a href="edit/" target="_self">New</a></li>
  

但是我们需要考虑所有东西都在适配器下,以便将它与回收视图适配器

集成在一起
https://localhost:3000/1/#/edit/

和按钮的这些变量将取消

  @Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycleview_news_feed, parent, false);

    ViewHolder viewHolder = new ViewHolder(view);

    return viewHolder;
}