【问题标题】:Android Java Retrofit repeating call gives ConnectExceptionAndroid Java Retrofit 重复调用会产生 ConnectException
【发布时间】:2021-10-11 09:36:50
【问题描述】:

您好,我想在通话完成后一次又一次地调用请求。我是这样做的:

OnContinueUserPing.java

public interface OnContinueUserPing {

    void onContinue();
}

GameActivity.java

 public class GameActivity extends AppCompatActivity implements OnContinueUserPing {
    
    (...)

        @Override
        public void onStart() {
            restModel.setUserPing(login, this);
        }
    
        @Override
        public void onContinue() {
                restModel.setUserPing(login, this);
        }
    }

RestModel.java

public void setUserPing(String login, OnContinueUserPing onContinueUserPing) {
    Call<String> result = Api.getClient().setUserPing(login);
    result.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            Log.e("setUserPingResponse", "a");
            onContinueUserPing.onContinue();
        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            Log.e("setUserPingError", t.toString());
            call.clone().enqueue(this);
        }
    });
}

它在最初的几分钟内有效。但后来我只得到:java.net.ConnectException: Failed to connect to MY_URL

我可以添加我将这些调用发送到我的 heroku 应用程序(如果这很重要,免费计划)。

如何解决这些失败的连接?提前谢谢!

【问题讨论】:

  • 你不要一次又一次地发出请求。
  • 你错了。我看到此通话没有结束日志。

标签: java android heroku retrofit


【解决方案1】:

克隆call 对象onFailure 可能会带来一些问题。尝试改变,

call.clone().enqueue(this);

onContinueUserPing.onContinue();

Heroku 也可能会拒绝对服务器的连续请求。尝试在 URL 中添加一个附加参数,并在每次请求时更改该参数。

int requestCount = 1;
String url = "http://your.domain.url?reqCount=" + requestCount++;

同时,您的方法不是一个好习惯。您应该尝试按设定的时间间隔进行轮询或使用 WebSocket 之类的东西。

【讨论】:

  • 它没有解决问题,仍然收到很多ConnectErrors
  • @Kiubaz 服务器是否期待GET 请求?它在最初的几分钟内是否正常工作?你在本地测试过吗?
  • 是的,我已经为该 URL 设置了 @GetMapping。一段时间后,它会在出现问题的第一分钟内正常工作。嗯..你确定heroku接受这个URL参数reqcount吗?我在他们的官方网站上找不到任何相关信息
  • @Kiubaz heroku是否接受参数无关紧要,目的是每次更改请求URL。
  • 这可能是因为当这些错误出现时 WIFI 停止工作。当我关闭应用程序时,互联网再次开始工作,奇怪的事情......所以还是谢谢你。问题尚未解决,但我会将您的答案标记为最佳答案,为您提供真正有价值的帮助,亲切的问候! ;)
猜你喜欢
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多