Android Java Retrofit 重复调用给出 ConnectException

Android Java Retrofit repeating call gives ConnectException

您好,我想在调用完成后再次调用该请求。我是这样做的:

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 应用程序(如果这很重要,则免费计划)。

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

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

call.clone().enqueue(this);

onContinueUserPing.onContinue();

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

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

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