当我在活动中发送消息时,我想向多个用户(即组的用户)发送通知
Posted
技术标签:
【中文标题】当我在活动中发送消息时,我想向多个用户(即组的用户)发送通知【英文标题】:I want to send notification to multiple users (that is users of a group) when i send a message in an activity 【发布时间】:2019-07-03 13:34:53 【问题描述】:我有用户列表,当我发送消息时,该组中的所有用户都会收到消息,但不会发送通知。我使用 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();
);
【问题讨论】:
Stack Overflow 是一个非常低效的调试器,所以你必须自己做很多事情,然后告诉我们如果你仍然卡住会发生什么。例如:当您在调试器中运行代码并在onDataChange
的第一行放置断点时,它会到达那里吗?如果是这样,您可以进入for
循环(即是否有任何token
值)?如果是这样,onResponse
第一行的断点会被命中吗?
好的....让我试试,然后请回来。
@Frank Van Puffelen,断点到达 onDataChange 的第一行,我在下面收到这条消息,但我不明白:DataSnapshot key = Tokens, value = upbpNg2QWabSpWS9kU6YIuAJxct1=token=d3VQn_ASn-A :APA91bF6Pn9CcYa_zK8cPkt-RgKftzymm4m9b7Kxbtxwq8FQZnGDyS1KOxoGpwrmvGb9s4iv67dWn92R6ZwRcX56MAYiUIh1XI697ttRQA8csDSZBLOLgAXEd22eB40x0Am5YedrdifV
如果调试器命中第一行,这意味着您正在从数据库中获取数据。因此,在这种情况下,问题可能在于您如何解析/处理dataSnapshot
。所以请继续按照我的第一条评论中的步骤操作:您可以进入for
循环(即是否有任何token
值)?如果是这样,onResponse
第一行的断点会被命中吗?
会这样做并回来..谢谢
【参考方案1】:
我找到了答案,那就是清理我的项目并重建它。
为此:
-
在菜单栏找到Build,点击它,你会看到Clean Project和Rebuild Project。
点击Clean Project,耐心等待gradle完成。
现在单击重建项目,它对我有用。
我上面发布的代码运行良好,但我认为 android studio 行为不端。希望它有助于以防有人遇到类似的问题。
【讨论】:
以上是关于当我在活动中发送消息时,我想向多个用户(即组的用户)发送通知的主要内容,如果未能解决你的问题,请参考以下文章