2016-11-08 58 views
0

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

聊天室代码

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

回答

0

你的代码只是不编译使用火力9.8。然后,它不能工作,因为你刚刚删除它后,你的适配器的项目。最后,我认为在Firebase确认删除之前,您不应该从适配器中移除聊天室。

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

@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); 
} 
+0

我已经添加了创建聊天室的代码 –

+0

确定我认为我的代码应该可以工作 - 你试过吗? – Benoit

+0

是的,它的工作!你做对了! –