Retrofit 2 не получает ответ внутри AsyncTask каждые 1, 3, 5 ... раз - PullRequest
1 голос
/ 12 апреля 2020

Я использую 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;
    }
...