繁体   English   中英

Android-如何在Firebase中删除房间

[英]Android - how do I delete a room in Firebase

我正在开发一个聊天应用程序,而我才刚刚开始。 我有一个活动,用户可以打开聊天室并删除。 我的问题是删除。 我可以从列表中成功删除聊天室,但是我不知道如何从Firebase中删除它。 问题是我正在使用longclick,我的意思是,如果用户要删除聊天室,则需要在聊天室上单击,但长按一下,然后弹出删除选项。 然后他按下按钮“删除”,并将其从列表中删除。

聊天室代码

   public class MainActivity extends AppCompatActivity {

private Button createChat;
private EditText chatRoomName;
private ListView listView;
private ArrayAdapter<String> arrayAdapter;
private ArrayList<String> listOfChats = new ArrayList<>();
private String name;
private DatabaseReference root  = FirebaseDatabase.getInstance().getReference().getRoot();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

       ifUserIsLoggedIn(); // Method that checks if the user is logged in. if not, it will take the
                           // user to Login Activity
    createChat = (Button)findViewById(R.id.createChatBtn);
    chatRoomName = (EditText)findViewById(R.id.chatRoomEt);
    listView = (ListView)findViewById(R.id.listView);

    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, listOfChats);

    listView.setAdapter(arrayAdapter);

        // this method delete a chat room after a long click when "delete" button press
@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

    switch(item.getItemId()){

        case R.id.delete:
            arrayAdapter.remove(arrayAdapter.getItem(info.position));
            root.removeValue(arrayAdapter.getItem(info.position));

    }

    return super.onContextItemSelected(item);
}

public boolean onContextItemSelected(MenuItem item)方法上,获取列表的ID并将其从列表中删除。 但我不知道如何从Firebase中删除它。 在firebase中,我将其另存为根。 如果缺少代码,请告诉我,以便我可以上传更多代码

编辑-创建聊天代码

    createChat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            mgr.hideSoftInputFromInputMethod(chatRoomName.getWindowToken(),0);

            // send to the fire base the data. it sends only the name of the room, with no any key.
            Map<String, Object> map = new HashMap<String, Object>();
            map.put(chatRoomName.getText().toString(), "");
            root.updateChildren(map);
            chatRoomName.setText("");
        }
    });

您的代码只是无法使用Firebase 9.8进行编译。 然后它无法工作,因为您在删除适配器后立即引用了适配器的一项。 最后,我认为您不应该在Firebase确认删除聊天室之前从适配器删除聊天室。

很难给出100%正确的答案,因为您不会显示创建聊天室的代码。 无论如何,我在这里假设聊天室是root下的孩子。 尝试这个 :

@Override
public boolean onContextItemSelected(MenuItem item){
    final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

    switch (item.getItemId()) {

        case R.id.delete:

            final String chatRoomToDelete = arrayAdapter.getItem(info.position)
            root.child(chatRoomToDelete).removeValue(new DatabaseReference.CompletionListener() {
                @Override
                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                    if (databaseError == null) {
                        arrayAdapter.remove(chatRoomToDelete);
                    } else {
                        // show databaseError to user
                    }
                }
            });

    }

    return super.onContextItemSelected(item);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM