值更改时,Firebase数据库将重新打开活动

时间:2018-07-11 04:09:51

标签: android firebase firebase-realtime-database

当我更改数据库中的值时,我的活动出现问题。我尝试使用工具栏创建一个新的Activity,该工具栏的标题通过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类的完整代码。

Here,您可以看到上一个活动(太大)。并且here可以在我更改数据库中的内容时看到日志。

谢谢!

1 个答案:

答案 0 :(得分:0)

通过查看链接中提供的代码,您似乎正在启动function asyncGetAllTask(){ return new Promise((resolve,reject)=>{ // The resolve callback should probably be passed to getAllTasks // as per your defintion of Task.getAllTasks Task.getAllTasks((error, rows) => { if(error) { reject(error); } else { resolve(rows); } }); }) } TestingActivity

这是链接中的代码:

EventSingleActivity

这就是为什么从firebase数据库进行的每次更改都会启动我上面提到的活动的原因。

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

            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) {

                        }
                    });
                }
            });