我有一个应用程序,该应用程序在首次运行时会创建FCM令牌,然后将该令牌根据手机号码保存在Firebase数据库中。
在数据库中保存数据的过程是,首先从数据库中检索数据,然后在onDataChange()
中,如果已经存在,则应更新数据,否则将重新创建数据。
现在的问题是这样的:当我打开应用程序时,使用手机号码'1234'并在数据库令牌中对此说'1'。现在,如果我使用相同的数字(即“ 1234”)在另一台手机中打开该应用,则另一台设备中的令牌为“ 2”。在数据库中,编号为1234的令牌应从“ 1”更新为“ 2”,但没有发生。实际上,当数据更新为2时,它又转换为1,然后又转换为2,然后是1,然后又是2,依此类推。
我想如果针对手机号码生成了新令牌,那么应该对其进行更新。
这是我的代码:
tokenZ = new Token();
SharedPreferences sharedPreferenceZ =activity.getSharedPreferences(cmn.SHARED_SPNAME,MODE_PRIVATE);
final String tokens = sharedPreferenceZ.getString(cmn.RegistrationTokenforFirebase,"1");
final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
final DatabaseReference databaseChild = FirebaseDatabase.getInstance().getReference().child("" + UserID);
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull Datasnapshot datasnapshot) {
Map<String,Object> oldData = (Map<String,Object>) datasnapshot.getvalue();
if (oldData != null) {
System.out.println("oldDD" + oldData.get(UserID));
System.out.println("oldDDy" + "{token=" + tokens + "}");
if (oldData.get(UserID) != null) {
System.out.println("Number already");
Map<String,Object> currentData = (Map<String,Object>) oldData.get(UserID);
if (oldData.get(UserID).toString().equals("{token=" + tokens + "}")) {
System.out.println("Token already");
currentData.put("token",tokens);
databaseChild.updateChildren(currentData);
} else {
System.out.println("New Token");
// databaseChild.removeValue();
tokenZ.setToken(tokens);
databaseChild.setvalue(tokenZ);
FirebaseMessaging.getInstance().setautoInitEnabled(false);
}
} else {
System.out.println("New Number");
tokenZ.setToken(tokens);
databaseChild.setvalue(tokenZ);
}
} else {
tokenZ.setToken(tokens);
databaseChild.setvalue(tokenZ);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});