Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除firebase条目节点Android Java_Java_Android_Firebase - Fatal编程技术网

删除firebase条目节点Android Java

删除firebase条目节点Android Java,java,android,firebase,Java,Android,Firebase,我从一个列表视图向firebase添加了一个国家列表,现在我试图通过列表视图项单击来分别删除节点 这个列表现在显示在一个列表视图中,我希望当我点击一个特定的国家时,它会被删除。到目前为止,我已经做了: listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent

我从一个列表视图向firebase添加了一个国家列表,现在我试图通过列表视图项单击来分别删除节点

这个列表现在显示在一个列表视图中,我希望当我点击一个特定的国家时,它会被删除。到目前为止,我已经做了:

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