如何检测Android Studio Firebase数据库中其他设备上的更改?

时间:2019-04-29 22:51:12

标签: android firebase firebase-realtime-database

我正在为我的Android聊天应用程序开发Firebase实时数据库。我有一个活动可以创建一个新的聊天群组。我已经成功创建了该组并将其信息插入数据库。然后,有一个带有回收者视图的家庭活动。我想立即为管理员添加的所有成员更新回收者视图。根据我的猜测,可以通过添加ValueEventListener来实现。但是我面临一些问题,例如:

1)我的回收者视图在另一个活动上。

2)每当我尝试使用ValueListener时,它只会触发正在创建组的管理员,而不会触发当时可以处于Home活动中的其他成员。

这是我的Firebase数据库:

enter image description here

这是我的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();
}

0 个答案:

没有答案