当前,在此活动的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方法。但是我的问题是,如果仍未在数据库中创建收藏夹,该如何验证呢?。
我再次运行了该应用程序,并再次创建了一个相同的标签:
答案 0 :(得分:0)
基本上,您需要将自己喜欢的按钮设置为切换按钮
favoritesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// in place of YES/NO you can take any values to present true/false state
boolean status = v.getTag() != null ? v.getTag().equals("YES") : false;
v.setTag(status ? "NO" : "YES");
if (status) {
// Do favorite me
//AddFavoritesuser();
} else {
// Do un favorite me
//deleteFavoritesUser(key);
}
}
}
答案 1 :(得分:0)
每次我运行android仿真器时,都会创建另一个收藏夹节点。
之所以发生这种情况,是因为每次尝试向数据库中添加globalOffset
类的新对象时,您都在使用Favorites
方法,该方法每次都会生成一个新的随机密钥。这就是这种方法的作用。因此,为了从数据库中检查属性,您需要在引用中使用相同的键,不来生成另一个。请在我的 post 答案中看到,我在其中解释了如何实现此目标。