Я пытаюсь удалить дочерний элемент из базы данных, установив уникальный ключ в значение null. Что я делаю - я нажимаю и удерживаю элемент списка, чтобы получить диалоговое окно оповещений, а затем нажмите, чтобы удалить выбранную запись. Проблема в том, что когда я извлекаю ключ, он возвращает мне все ключи. И ближе всего мне удалось зайти так далеко, чтобы удалить все из базы данных. Пожалуйста, проверьте мои снимки кода ниже:Как удалить выбранного ребенка в базе данных Firebase Android
mLocationListView.setLongClickable(true);
mLocationListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
.setTitle("Delete a Location")
.setMessage("Do you want to delete your location?")
.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Problem is here. if I exclude .child(pushKey)everything is deleted from the database.
DatabaseReference db_node = FirebaseDatabase.getInstance().getReference().getRoot().child("locations").child(pushKey);
db_node.setValue(null);
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
}
});
Вот как я извлекаю pushKey. Любые предложения, как это сделать более правильно? (Если есть один)
queryRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
locationCurrent = dataSnapshot.getValue(LocationCurrent.class);
mLocationAdapter.add(locationCurrent);
pushKey = dataSnapshot.getKey();
Log.i("PUSH KEY ", pushKey);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
locationCurrent = dataSnapshot.getValue(LocationCurrent.class);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Я думал положить ключ к базе данных, но нет никакого смысла и должна быть наиболее эффективным решением.
UPDATE:
Я попытался сделать это с другим методом прикрепляя слушатель событий одно значения для запроса, но она не работает, потому что я не могу определить, какой элемент списка я нажимаю на, так что я удалить всю базу данных. В принципе, мне нужно щелкнуть элемент списка и удалить его. Но это не работает. Я сделал именно так, как в ссылке здесь ниже:
How to delete from firebase realtime database?
Любые предложения?
Так как пользователь нажал на конкретный пункт, вам нужно посмотреть этот пункт на этой позиции. Это часть функции адаптера. Непонятно, как это сделать в коде, но если вы используете «FirebaseListAdapter» (https://github.com/firebase/FirebaseUI-Android/tree/master/database#create-custom-firebaselistadapter- подкласс) это будет 'adapter.getRef (position) .removeValue()'. –
Я использую пользовательский адаптер. Так что, я думаю, лучше изменить его на адаптер списка адресов только ради спасения от большей головной боли? –
Вы можете придерживаться пользовательского адаптера. Но вам понадобится аналогичная логика, которая позволит вам искать «DatabaseReference» для элемента в позиции, которая была нажата. –