删除firebase条目节点Android Java
我从一个列表视图向firebase添加了一个国家列表,现在我试图通过列表视图项单击来分别删除节点 这个列表现在显示在一个列表视图中,我希望当我点击一个特定的国家时,它会被删除。到目前为止,我已经做了:删除firebase条目节点Android Java,java,android,firebase,Java,Android,Firebase,我从一个列表视图向firebase添加了一个国家列表,现在我试图通过列表视图项单击来分别删除节点 这个列表现在显示在一个列表视图中,我希望当我点击一个特定的国家时,它会被删除。到目前为止,我已经做了: listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String Country =(listView.getItemAtPosition(position).toString());
showPopUp(Country);
}
});
虽然我认为我需要从firebase中取出钥匙,而不是孩子。我应该如何实现这一点
注意:我通过以下方式将国家/地区从API添加到列表视图:
DatabaseReference dref;
ListView listView;
ArrayList<String> list = new ArrayList<>();
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favourite_countries_list);
listView = (ListView) findViewById(R.id.lstViewFavCountries);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(adapter);
dref = FirebaseDatabase.getInstance().getReference();
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for(DataSnapshot dsp : dataSnapshot.getChildren()){
String value = dataSnapshot.getValue().toString();
list.add(String.valueOf(dsp.getValue()));
}
adapter.notifyDataSetChanged();
}
数据库参考dref;
列表视图列表视图;
ArrayList=新建ArrayList();
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u Favorite\u countries\u list);
listView=(listView)findViewById(R.id.lstViewFavCountries);
adapter=newarrayadapter(这是android.R.layout.simple\u list\u item\u 1,list);
setAdapter(适配器);
dref=FirebaseDatabase.getInstance().getReference();
dref.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
对于(DataSnapshot dsp:DataSnapshot.getChildren()){
字符串值=dataSnapshot.getValue().toString();
list.add(String.valueOf(dsp.getValue());
}
adapter.notifyDataSetChanged();
}
数据库的链接您需要将密钥保存在某个地方,调用
dataSnapshot.getKey()
获取密钥
首先,为键创建一个新列表
ArrayList<String> listKey = new ArrayList<>();
最后,在onItemClick
方法中,根据位置从列表中获取密钥,然后将字符串传递给删除方法
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String CountryKey = listKey.get(position);
showPopUp(CountryKey);
}
请显示您的listView
实现(如何将数据填充到listView
)重新编辑后的删除方法将包括:myref.removeValue();?是的,该方法已经正确dref.child(cntry).removeValue();
。您不必在showPopUp()内执行任何操作
请在您的问题@GlenMicallefwhat work and what not work?中更新您的代码。您以前成功地将数据从数据库填充到列表视图了吗?因为我注意到数据库引用有一些奇怪的地方。列表视图中的人口是正确的,显示每个国家的按键的土司也是正确的own正确。我认为dref.child(cntry).removeValue()中有一些内容,因为记录仍然存在,但密钥已传递
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for(DataSnapshot dsp : dataSnapshot.getChildren()){
String value = dataSnapshot.getValue().toString();
list.add(String.valueOf(dsp.getValue()));
listKey.add(dsp.getKey());
}
adapter.notifyDataSetChanged();
}
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String CountryKey = listKey.get(position);
showPopUp(CountryKey);
}
dref.child("Countries").child(cntry).removeValue();