如何解决为什么即使不总是满足条件,我的循环也总是通过?
我正在制作一个聊天应用程序,使用REST呼叫检查是否有任何新消息。在一秒钟的计时器上,我正在检查列表中最后一条消息的ID是否与新下载列表的最后ID相同。如果它不是相同的ID(有新消息),则更新recycerview。问题是它会不断更新,而没有任何新消息,我不确定为什么。尽管我似乎找不到它,这很可能是一个简单的问题。
计时器:
Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
readMessages(myId,chatId);
}
},1000);
REST呼叫:
private void readMessages(String myId,String chatId) {
apiInterface = apiclient.getClient().create(userApi.class);
Call<LinkedList<Messages>> call = apiInterface.getMessages(myId,chatId);
call.enqueue(new Callback<LinkedList<Messages>>() {
@Override
public void onResponse(Call<LinkedList<Messages>> call,Response<LinkedList<Messages>> response) {
mList.clear();
mList = response.body();
if (mList2.isEmpty() || mList2.getLast().getId().equals(mList.getLast().getId())) {
messageAdapter = new MessageAdapter(ChatActivity.this,mList,Integer.parseInt(myId));
recyclerView.setAdapter(messageAdapter);
mList2.clear();
mList2 = (LinkedList) mList.clone();
Toast.makeText(ChatActivity.this,mList2.getLast().getId(),Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<LinkedList<Messages>> call,Throwable t) {
}
});
}
解决方法
您的if
语句的第一部分是mList2.isEmpty()
(我假设mList
和mList2
实际上是同一件事)。对于每次对onResponse
的调用都通过if
的原因进行了一个大胆的猜测,即测试实际上是该列表为空。尝试分步调试并在if
行上放置一个断点进行检查,如果是,请查看您的REST服务,以了解为什么它以空列表作为响应。
那么在您的代码中,如果不满足该条件该怎么办?
如果看到一个if
语句。让我们假设我们不参加会议是因为没有满足条件。那么else语句在哪里?如果条件不匹配,该怎么办?由于函数中没有其他事情要做,因此控件将从函数返回到计时器。
您可以尝试将timer放入if语句中,这样它只会在满足您的条件时运行。
您认为这是问题所在吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。