为什么即使不总是满足条件,我的循环也总是通过?

时间:2020-08-24 15:22:55

标签: java android rest loops timer

我正在制作一个聊天应用程序,使用REST呼叫检查是否有任何新消息。在一秒钟的计时器上,我正在检查列表中最后一条消息的ID是否与新下载列表的最后ID相同。如果它不是相同的ID(有新消息),则更新recycerview。问题是它会不断更新,而没有任何新消息,我不确定为什么。尽管我似乎找不到它,这很可能是一个简单的问题。

计时器:

Timer t = new Timer();
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                readMessages(myId, chatId);
            }
        }, 0, 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) {
            }
        });
    }

2 个答案:

答案 0 :(得分:0)

您的if语句的第一部分是mList2.isEmpty()(我假设mListmList2实际上是同一件事)。对于每次对onResponse的调用都通过if的原因进行了一个大胆的猜测,即测试实际上是该列表为空。尝试分步调试并在if行上放置一个断点进行检查,如果是,请查看您的REST服务,以了解为什么它以空列表作为响应。

答案 1 :(得分:0)

那么在您的代码中,如果不满足该条件该怎么办?

如果看到一个if语句。让我们假设我们不参加会议是因为没有满足条件。那么else语句在哪里?如果条件不匹配,该怎么办?由于函数中没有其他事情要做,因此控件将从函数返回到计时器。

您可以尝试将timer放入if语句中,这样它只会在满足您的条件时运行。

您认为这是问题所在吗?