Как зациклить call на сервер? Retrofit
У меня проблема. Я отправлю POST с номером телефона на сервер и чекаю после этого GET запрос. Сервер обрабатывает запрос со статусом "wait" и "ok" и возвращает результат. Мне нужно получать body только тогда, когда статус "ok". В противном случае зациклить вызов раз в 3 секунды и делать повторно с таймаутом в 30 секунд. Если за 30 секунд не было "ok" то я вывожу информацию "Информация не найдена, попробуйте позднее"
Помогите, пожалуйста.
Мой интерфейс. тут все ок
public interface ServerApiInterface {
@GET("checkphone/client/{phone}")
Call<PhoneNumberModel> getAllInfo(@Path("phone") String phone);
@POST("checkphone2/client")
Call<PhoneNumberModel> createPost(@Body PhoneNumberModel number);
}
мой Post method
private void startToPost() {
ServerApiInterface myServerPlaceHolder = RetroRestClient.getRetrofitInstance().create(ServerApiInterface.class);
PhoneNumberModel myPhoneNumber = new PhoneNumberModel(phone);
Call<PhoneNumberModel> postCall = myServerPlaceHolder.createPost(myPhoneNumber);
postCall.enqueue(new Callback<PhoneNumberModel>() {
@Override
public void onResponse(Call<PhoneNumberModel> call, Response<PhoneNumberModel> response) {
if(response.isSuccessful()) {
goToGetRequest();
//вызываю гет запрос
}
}
@Override
public void onFailure(Call<PhoneNumberModel> call, Throwable t) {
t.printStackTrace();
}
});
}
Мой GET метод
private void goToGetRequest() {
ServerApiInterface myServerPlaceHolder = RetroRestClient.getRetrofitInstance().create(ServerApiInterface.class);
Call<PhoneNumberModel> getCall = myServerPlaceHolder.getAllInfo(phone);
Thread thread = new Thread() {
@Override
public void run() {
super.run();
try {
String s = getCall.execute().body().getState();
PhoneNumberModel d = getCall.clone().execute().body();
Log.d("ddd", s);
if (s.equals("ok")) {
Log.d("ddd", s);
String ggg = new Gson().toJson(d);
//выполням работу дальше
sendSomething(ggg);
} else {
Log.d("ddd", "не найдено. попробуйте позднее");
}
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
}
};
thread.start();
}