Проблема с Firebase добавлением потрясающей кнопки не может удалить запись - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время в подробном представлении есть плавающее основание, в этом упражнении я передаю информацию об Объекте с намерением.Я хочу, чтобы, когда пользователь входит в действие detailView, у меня было заполненное сердце, если этот Automoviles objectId уже существует в узле Favorites.if, не добавляя информацию в базу данных.Если избранное уже существует и у него заполнено сердце, если пользователь щелкнет снова, оно удалит его из базы данных.

Это мой класс избранного:

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);
        }
    });

Который ведет эту запись в базе данных:

Данные Firebase

Это все хорошо, но мне нужно проверить такжеесли избранное существует или отсутствует в базе данных, или же каждый раз, когда я запускаю эмулятор 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 и метод удаления:

 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.Если он существует, пользователь входит и видит заполненное сердце, если он хочет удалить это избранное, он щелкает снова, и он запускает метод deleteFovingUser.Но мой вопрос в том, что, если Избранное все еще не создано в базе данных, как я могу также проверить это?.

Я снова запустил приложение, и я снова создал ту же Вейл:

Как видите, у меня та же запись automovilesId

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

каждый раз, когда я запускаю эмулятор Android, он создает новый узел избранного.

Это происходит потому, что каждый раз, когда вы пытаетесь добавить новый объект класса Favorites в базу данных,Вы используете метод push(), который генерирует новый случайный ключ каждый раз, когда вызывается.Это то, что делает этот метод.Таким образом, чтобы проверить свойство из базы данных, вам нужно использовать в своей ссылке тот же ключ, , а не , чтобы сгенерировать другой.Пожалуйста, смотрите в моем ответе из этого поста , где я объяснил, как вы можете достичь этого.

0 голосов
/ 03 октября 2018

в основном вам нужно сделать свою любимую кнопку в качестве переключателя

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);
        }
    }
}
...