我正在为我的Android聊天应用程序开发Firebase实时数据库。我有一个活动可以创建一个新的聊天群组。我已经成功创建了该组并将其信息插入数据库。然后,有一个带有回收者视图的家庭活动。我想立即为管理员添加的所有成员更新回收者视图。根据我的猜测,可以通过添加ValueEventListener
来实现。但是我面临一些问题,例如:
1)我的回收者视图在另一个活动上。
2)每当我尝试使用ValueListener时,它只会触发正在创建组的管理员,而不会触发当时可以处于Home活动中的其他成员。
这是我的Firebase数据库:
这是我的AddNewGroup
活动的代码,其中不包含任何回收者视图:
public void makeGroupBtn(View view)
{
displayDialogBox("Creating group");
TextInputLayout inputLayout = findViewById(R.id.textInputLayout4);
final String gname = inputLayout.getEditText().getText().toString();
if(TextUtils.isEmpty(gname))
{
inputLayout.setError("Group name is required");
hideDialogBox();
return;
}
int marked = 0;
for (Contact c : availableContacts)
{
if(c.isChecked())
marked++;
}
if(marked == 0)
{
Toast.makeText(this, "No contact selected", Toast.LENGTH_SHORT).show();
hideDialogBox();
return;
}
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("users").child(FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber()).child("groups");
final String key = reference.push().getKey();
reference = reference.child(key);
/*
Adding in the node of admin who created the group
*/
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put("adminPhone", FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber());
hashMap.put("groupName",gname);
final long time = new Date().getTime();
hashMap.put("timeCreated", String.valueOf(time));
reference.setValue(hashMap);
/*
Adding in the nodes of other members which admin selected
*/
for (Contact c : availableContacts)
{
if(c.isChecked())
{
reference = FirebaseDatabase.getInstance().getReference().child("users").child(c.getPhone()).child("groups");
reference = reference.child(key);
reference.setValue(hashMap);
}
}
Intent i = new Intent(this,ChatThread.class);
i.putExtra("groupName",gname);
i.putExtra("groupKey",key);
startActivity(i);
finish();
}