我已经开发了一个Android应用程序,我使用Firebase进行身份验证,数据库和存储。在我的应用程序中,有Navigationview,并且有5 6个片段。例如,有一个配置文件片段,用户可以在其中更改个人信息,但是在保存按钮配置文件片段崩溃并且应用程序返回到HomePageActivity之后。在活动中上载图像也存在相同的问题。用户通过活动上传一些伤口照片,这些照片是从片段中获取的。但是,在将照片上传到存储并将信息发送到数据库活动后,崩溃了,应用程序又回到了HomePageActivty。我同时使用了addValueEventListener和addListenerForSingleValueEvent,但问题尚未解决。你可以帮帮我吗? 这是一个示例:
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
save();
bringInfo();
Toast.makeText(ProfilActivity.this,"Info changes is saved.",Toast.LENGTH_LONG).show();
}
});
private void save() {
myRef.child("kullanicilar").child(firebaseUser.getUid())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, Object> postValues = new HashMap<String,Object>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
postValues.put(snapshot.getKey(),snapshot.getValue());
}
postValues.put("ad", (etNameH.getText().toString()).substring(0,1).toUpperCase()+(etNameH.getText().toString()).substring(1));
postValues.put("soyad", (etSurnameH.getText().toString()).substring(0,1).toUpperCase()+(etSurnameH.getText().toString()).substring(1));
postValues.put("hastane", etCalistigiKurumPr.getText().toString());
myRef.child("kullanicilar").child(firebaseUser.getUid()).updateChildren(postValues);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
}
);
}
private void bringInfo() {
myRef.child("kullanicilar")
.child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
user = dataSnapshot.getValue(Users.class);
etNameH.setText(user.getAd());
etSurnameH.setText(user.getSoyad());
etCalistigiKurumPr.setText(user.getHastane());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
答案 0 :(得分:0)
删除从btnSave调用的BringInfo()。将onClickListner方法和onDataChange方法放在下面
public void onClick(View v) {
save();
// bringInfo() remove from here
Toast.makeText(ProfilActivity.this,"Info changes is
saved.",Toast.LENGTH_LONG).show();
}
public void onDataChange(DataSnapshot dataSnapshot) {
// *****Remaining Code*****
bringInfo() put it here
}