【发布时间】:2018-10-03 19:03:08
【问题描述】:
目前,在此活动中,我的 detailView 中有一个浮动操作底部,我带着意图带来了 Object 的信息。我希望当用户进入 detailView 活动时,如果 Automoviles objectId 已经存在于收藏夹节点中,我会心满意足。如果不将信息添加到数据库中。如果收藏夹已经存在,并且如果用户再次点击它,它就会把它从数据库中删除。
这是我最喜欢的课程:
public class Favorites {
private String id;
private String automovilesId;
private String userId;
private String fecha;
public Favorites() {
}
public Favorites(String automovilesId, String userId, String fecha) {
this.automovilesId = automovilesId;
this.userId = userId;
this.fecha = fecha;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAutomovilesId() {
return automovilesId;
}
public void setAutomovilesId(String automovilesId) {
this.automovilesId = automovilesId;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getFecha() {
return fecha;
}
public void setFecha(String fecha) {
this.fecha = fecha;
}
}
目前我有这个代码:
databaseReference = FirebaseDatabase.getInstance().getReference(AppModel.Favorites);
favoritesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
final DatabaseReference usersRef = rootRef.child("Favorites");
favorites = new Favorites(automoviles.getObjectId(), user.getUid(), AppModel.GetDate());
databaseReference.push().setValue(favorites);
}
});
在数据库中哪个导致该条目:
这一切都很好,但我还需要验证数据库中是否存在收藏夹,否则每次我运行 android 模拟器时它都会创建另一个收藏夹节点。
现在我添加了更多代码。但是当我运行它并添加这个 AddFavorite 方法时,它将在数据库中创建收藏节点的无限循环
databaseReference = FirebaseDatabase.getInstance().getReference(AppModel.Favorites);
favoritesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
final DatabaseReference usersRef = rootRef.child("Favorites");
favorites = new Favorites(automoviles.getObjectId(), user.getUid(), AppModel.GetDate());
databaseReference.push().setValue(favorites);
usersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String car = ds.child("automovilesId").getValue(String.class);
Favorites fav =ds.getValue(Favorites.class);
String carId =fav.getAutomovilesId();
Log.i("No","Este es el nombre------>:"+carId);
String id=ds.getKey();
AddFavoritesuser();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
这是AddFavorite方法和delete方法:
private void AddFavoritesuser() {
favoritesButton.setImageResource(R.drawable.ic_favorite);
favorites = new Favorites(automoviles.getObjectId(), user.getUid(), AppModel.GetDate());
databaseReference.push().setValue(favorites);
}
还有删除:
private void deleteFavoritesUser(String key) {
favoritesButton.setImageResource(R.drawable.ic_favorite_border);
databaseReference.child(key).getRef().removeValue();
}
简而言之,我希望它验证 Automoviles 对象是否存在。如果它存在,用户进入并看到填充的心,如果他想删除这个收藏夹,那么他再次点击,它将运行 deleteFavoritesUser 方法。但我的问题是,如果收藏夹仍然没有在数据库中创建,我该如何验证呢?
我再次运行该应用程序并再次创建了相同的 vale:
【问题讨论】:
-
这是由于 addValueEventListener 而发生的,每当您在 firebase 集合中添加某些内容时,它都会不断调用。理想情况下,您不需要从 onDataChange 方法插入。
-
那么我将如何检查数据库中是否已经存在 automovilesId? @KrishnaSharma
-
您已经在侦听器范围之外执行此操作,因此您只需从 onDataChange 注释掉这行代码 //AddFavoritesuser();
-
那么我应该如何做我需要验证它是否存在的所有其他事情,放置彩色心形图标,如果用户再次单击,它将从数据库中删除该收藏夹并放置边框心形。 @KrishnaSharma
-
基本上你需要把你喜欢的按钮做成一个切换按钮
标签: java android firebase firebase-realtime-database onclicklistener