单击按钮删除单个节点
Remove a single node on a click on the button
我正在尝试创建一个函数,在单击提交按钮后,我可以根据用户在 "TextField" 中的输入删除 "Restaurant Name"。
餐厅分为早餐、午餐和晚餐。
我尝试使用 remove()
函数,但它删除了早餐中的 所有内容 ,我在其中的所有数据的名称。
{
"BibleVerse": "Verse1",
"Breakfast": {
"Name": {
"-JyjnX_b6yQCR068oA9i": "firefly",
"-Jyjn_5Wzr1vP5rXi_IG": "congee queen",
"-JyjncESMv5vd2nQh4l6": "steakhouse"
}
},
"Dinner": "Dinner",
"Gathering": "Home",
"Lunch": "Lunch",
"NexcellMember": "Member1",
"User": "Adrian"
}
这是我的 Java class,目前...我不知道如何使用从 Textfield
捕获的文本将其设置为从 Firebase 中删除,我只能删除整个数据集。
public class DeleteRestaurant extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.deleterestaurant);
Firebase.setAndroidContext(this);
Button DelRestNow = (Button) findViewById(R.id.delbutton);
DelRestNow.setOnClickListener(Handler);
}
//Specific Button - Delete Restaurant Name
View.OnClickListener Handler = new View.OnClickListener(){
public void onClick(View v){
DelData();
}
};
public void DelData(){
// GET and DELETE(Through Database Restaurant Name
EditText mEdit = (EditText)findViewById(R.id.delText);
String RestName = mEdit.getText().toString();
// Get from Database
Firebase ref = new Firebase("https://myfburl.firebaseio.com");
ref.child("Breakfast/Name").removeValue();
mEdit.setText("");
}
}
您需要使用查询来查找所需的项目。在这种情况下,由于您要查找 value 与用户输入的字符串相匹配的项目,因此您需要使用 orderByValue()
:
EditText edit = (EditText)findViewById(R.id.delText);
final String name = edit.getText().toString();
Query query = mRef.child("Breakfast/Name").orderByValue().equalTo(name);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot itemSnapshot : dataSnapshot.getChildren()) {
itemSnapshot.getRef().removeValue();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
edit.setText("");
我添加了一个 activity 来显示我的演示应用程序的实际效果:https://github.com/puf/firebase-Whosebug-android
我正在尝试创建一个函数,在单击提交按钮后,我可以根据用户在 "TextField" 中的输入删除 "Restaurant Name"。
餐厅分为早餐、午餐和晚餐。
我尝试使用 remove()
函数,但它删除了早餐中的 所有内容 ,我在其中的所有数据的名称。
{
"BibleVerse": "Verse1",
"Breakfast": {
"Name": {
"-JyjnX_b6yQCR068oA9i": "firefly",
"-Jyjn_5Wzr1vP5rXi_IG": "congee queen",
"-JyjncESMv5vd2nQh4l6": "steakhouse"
}
},
"Dinner": "Dinner",
"Gathering": "Home",
"Lunch": "Lunch",
"NexcellMember": "Member1",
"User": "Adrian"
}
这是我的 Java class,目前...我不知道如何使用从 Textfield
捕获的文本将其设置为从 Firebase 中删除,我只能删除整个数据集。
public class DeleteRestaurant extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.deleterestaurant);
Firebase.setAndroidContext(this);
Button DelRestNow = (Button) findViewById(R.id.delbutton);
DelRestNow.setOnClickListener(Handler);
}
//Specific Button - Delete Restaurant Name
View.OnClickListener Handler = new View.OnClickListener(){
public void onClick(View v){
DelData();
}
};
public void DelData(){
// GET and DELETE(Through Database Restaurant Name
EditText mEdit = (EditText)findViewById(R.id.delText);
String RestName = mEdit.getText().toString();
// Get from Database
Firebase ref = new Firebase("https://myfburl.firebaseio.com");
ref.child("Breakfast/Name").removeValue();
mEdit.setText("");
}
}
您需要使用查询来查找所需的项目。在这种情况下,由于您要查找 value 与用户输入的字符串相匹配的项目,因此您需要使用 orderByValue()
:
EditText edit = (EditText)findViewById(R.id.delText);
final String name = edit.getText().toString();
Query query = mRef.child("Breakfast/Name").orderByValue().equalTo(name);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot itemSnapshot : dataSnapshot.getChildren()) {
itemSnapshot.getRef().removeValue();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
edit.setText("");
我添加了一个 activity 来显示我的演示应用程序的实际效果:https://github.com/puf/firebase-Whosebug-android