Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Android 我想在活动中发送消息时向多个用户(即组的用户)发送通知_Android_Firebase_Firebase Realtime Database_Firebase Cloud Messaging - Fatal编程技术网

Android 我想在活动中发送消息时向多个用户(即组的用户)发送通知

Android 我想在活动中发送消息时向多个用户(即组的用户)发送通知,android,firebase,firebase-realtime-database,firebase-cloud-messaging,Android,Firebase,Firebase Realtime Database,Firebase Cloud Messaging,我有用户列表,当我发送消息时,该组中的所有用户都会收到消息,但不会发送通知。我使用for each循环遍历用户列表并发送通知。我使用相同的代码从一个用户向另一个用户发送通知(只需稍加修改)。请问我做错了什么?下面是我的代码: // sends notification to respective users as soon as message is sent private void sendNotification(final List<String> receivers

我有用户列表,当我发送消息时,该组中的所有用户都会收到消息,但不会发送通知。我使用for each循环遍历用户列表并发送通知。我使用相同的代码从一个用户向另一个用户发送通知(只需稍加修改)。请问我做错了什么?下面是我的代码:

// sends notification to respective users as soon as message is sent
    private void sendNotification(final List<String> receivers, final String username , final String message){

        /* for loop to loop through the list of users id in
        the group and send the notification accordingly */
        for(final String id : receivers){

            DatabaseReference tokens  = FirebaseDatabase.getInstance().getReference(Constants.TOKENS_REF);
            Query query = tokens.orderByKey().equalTo(id);
            query.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                        Token token = snapshot.getValue(Token.class);
                        Data data = new Data(admin_uid, R.mipmap.app_logo_round, username+": "+message,
                                getString(R.string.application_name), id);

                        assert token != null;
                        Sender sender = new Sender(data, token.getToken());

                        // apiService object to sendNotification to users
                        apiService.sendNotification(sender)
                                .enqueue(new Callback<MyResponse>() {
                                    @Override
                                    public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
                                        if(response.code() == 200){
                                            if(response.body().success != 1){
                                                Toast.makeText(GroupMessageActivity.this,"Failed!",Toast.LENGTH_LONG).show();
                                            }
                                        }
                                    }

                                    @Override
                                    public void onFailure(Call<MyResponse> call, Throwable t) {
                                        // display error message
                                        Toast.makeText(GroupMessageActivity.this,t.getMessage(),Toast.LENGTH_LONG).show();
                                    }
                                });
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    // display error message
                    Toast.makeText(GroupMessageActivity.this,databaseError.getMessage(),Toast.LENGTH_LONG).show();
                }
            });


        }

    }
//消息发送后立即向相应的用户发送通知
私有void sendNotification(最终列表接收者、最终字符串用户名、最终字符串消息){
/*for循环浏览中的用户id列表
组并相应地发送通知*/
for(最终字符串id:接收器){
DatabaseReference tokens=FirebaseDatabase.getInstance().getReference(Constants.tokens\u REF);
Query=tokens.orderByKey().equalTo(id);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
Token-Token=snapshot.getValue(Token.class);
数据数据=新数据(admin\u uid,R.mipmap.app\u logo\u round,用户名+“:”+消息,
getString(R.string.application\u name),id);
断言令牌!=null;
发送方=新发送方(数据,token.getToken());
//要向用户发送通知的apiService对象
apiService.sendNotification(发件人)
.enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用、响应){
if(response.code()==200){
if(response.body().success!=1){
Toast.makeText(GroupMessageActivity.this,“Failed!”,Toast.LENGTH_LONG.show();
}
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//显示错误消息
Toast.makeText(GroupMessageActivity.this,t.getMessage(),Toast.LENGTH_LONG.show();
}
});
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
//显示错误消息
Toast.makeText(GroupMessageActivity.this,databaseError.getMessage(),Toast.LENGTH_LONG.show();
}
});
}
}

我找到了答案,那就是清理我的项目并重建它

为此:

  • 在菜单栏上找到Build,单击它,您将看到Clean Project和Rebuild Project
  • 点击Clean Project,耐心等待gradle完成
  • 现在点击重建项目,它为我工作
    我上面发布的代码运行良好,但我认为android studio行为不端。希望它能在有人遇到类似问题时有所帮助

    堆栈溢出是一种效率极低的调试器,因此您必须自己完成大部分工作,然后告诉我们如果仍然卡住会发生什么。例如:当您在调试器中运行代码并在
    onDataChange
    的第一行上放置断点时,它是否曾经到达那里?如果是这样,您是否可以进入
    for
    循环(即是否有
    标记
    值)?如果是这样的话,
    onResponse
    第一行的断点会被击中吗?好的……让我试试看,然后再回来。@Frank Van Puffelen,断点会击中onDataChange中的第一行,我在下面看到这条消息,我不明白,请:DataSnapshot{key=Tokens,value={upppng2qwabspWS9ku6yiuajxct1={token=d3VQn_ASn-A:APA91bF6Pn9CcYa_zK8cPkt-RGKFTZYMM4M9B7KXBTXWQ8FQZNGDYS1KxOGPWRMVGB9S4IV67DWN92R6ZWRCX56MAYIUIH1XI697TTRQA8CSDSDBLOGAXED2EB40X0AM5YEDRDDIFv}}如果调试器点击第一行,这意味着您正在从数据库获取数据。因此,在这种情况下,问题可能在于如何解析它/处理
    dataSnapshot
    。因此,请继续遵循我第一条评论中的步骤:您是否可以进入
    for
    循环(即是否存在任何
    标记
    值)?如果是这样的话,
    onResponse
    的第一行上的断点是否被击中?将这样做并返回..谢谢