Я использую Retrofit для получения ответа, но каждый 1-й, 3-й, 5-й ... раз ответ не приходит после нажатия кнопки (я проверял почтальон или веб-браузер в разных сетях - ответ всегда есть). В режиме отладки каждый второй раз даже не входит в onResponse()
или onFailure()
методы:
Это мой MainActivity.class
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...//some not important code
Button syncButton = findViewById(R.id.syncBtn);
syncButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AsyncTaskRunner asyncTaskRunner = new AsyncTaskRunner();
asyncTaskRunner.execute();
}
});
}
Это мой AsyncTaskRunner.class :
private class AsyncTaskRunner extends AsyncTask<String, String, List<GetCheapestResponseType>> {
@Override
protected List<GetCheapestResponseType> doInBackground(String... strings) {
...//some not important code
MutableLiveData<List<GetCheapestResponseType>> getCheapestResponseTypeMutableListData = new MutableLiveData<>();
List<GetCheapestResponseType> getCheapestResponseTypeList = new LinkedList<>();
...//some not important code
MutableLiveData<GetCheapestResponseType> getCheapestResponseTypeMutableLiveData = getCheapestOneWay(...);
getCheapestResponseTypeList.add(getCheapestResponseTypeMutableLiveData.getValue());
...//some not important code
return getCheapestResponseTypeList.add(getCheapestResponseTypeMutableLiveData.getValue());
}
}
Это мой getCheapestOneWay(...);
метод с Retrofit:
public MutableLiveData<GetCheapestResponseType> getCheapestOneWay(...) {
...//some not important code
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(urlGetCheapest)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
Controller controller = retrofit.create(Controller.class);
Call<GetCheapestResponseType> callAsync = controller.getCheapest(...);
callAsync.enqueue(new Callback<GetCheapestResponseType>() {
@Override
public void onResponse(Call<GetCheapestResponseType> call, Response<GetCheapestResponseType> response) {
if (response.isSuccessful()) {
GetCheapestResponseType apiResponse = response.body();
mutableLiveData.postValue(apiResponse);
} else {
...//some not important code
}
}
@Override
public void onFailure(Call<GetCheapestResponseType> call, Throwable throwable) {
...//some not important code
}
});
return mutableLiveData;
}