首页 > 解决方案 > Firebase 数据库在值更改时重新打开活动

问题描述

当我更改数据库中的值时,我的活动出现问题。我尝试使用工具栏创建一个新活动,工具栏的标题通过数据库值更改ValueEventListener。问题是,当我更改数据库中的值时,活动会自行重新打开。

private static String eventKey;

private FirebaseAuth mAuth;
private DatabaseReference mDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_testing);

    mAuth = FirebaseAuth.getInstance();
    if (mAuth.getCurrentUser() == null) {
        finishAffinity();
        startActivity(new Intent(this, HomeScreenActivity.class));
    }

    eventKey = getIntent().getExtras().getString("eventKey");

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    mDatabase = FirebaseDatabase.getInstance().getReference().child("Eventos").child(eventKey);
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                String titleValue = dataSnapshot.child("title").getValue().toString();
                getSupportActionBar().setTitle(titleValue);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

这是 TestingActivity 类的完整代码。

在这里可以看到之前的活动(太大)。当我更改数据库中的某些内容时,您可以在这里看到日志。

谢谢!

标签: androidfirebasefirebase-realtime-database

解决方案


通过查看链接中提供的代码,您似乎正在启动TestingActivityor EventSingleActivity

这是链接中的代码:

            viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    mDatabase.child(id).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            String eventTime = dataSnapshot.child("timeStamp").getValue().toString();
                            if(Integer.parseInt(nowTime) > Integer.parseInt(eventTime)){
                                Intent intent = new Intent(PrincipalActivity.this, TestingActivity.class);
                                intent.putExtra("eventKey", id);
                                startActivity(intent);
                                finish();
                            } else {
                                Intent intent = new Intent(PrincipalActivity.this, EventSingleActivity.class);
                                intent.putExtra("eventKey", id);
                                startActivity(intent);
                            }
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                }
            });

这就是为什么 firebase db 的每一次更改都会启动我上面提到的活动。

要解决此问题,您需要执行以下操作:

            mDatabase.child(id).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                  String eventTime = dataSnapshot.child("timeStamp").getValue().toString();
                                                if(Integer.parseInt(nowTime) > Integer.parseInt(eventTime)){
                                                    Intent intent = new Intent(PrincipalActivity.this, TestingActivity.class);
                                                    intent.putExtra("eventKey", id);
                                                    startActivity(intent);
                                                    finish();
                                                } else {
                                                    Intent intent = new Intent(PrincipalActivity.this, EventSingleActivity.class);
                                                    intent.putExtra("eventKey", id);
                                                    startActivity(intent);
                                                }

                                }
                            });
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });

推荐阅读