当我更改数据库中的值时,我的活动出现问题。我尝试使用工具栏创建一个新的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可以在我更改数据库中的内容时看到日志。
谢谢!
答案 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) {
}
});
}
});