public static void sendFeedback(final Feedback feedback, final Context context) {
Call<MyServerResponse> sendFeedbackCall = service.sendFeedback(feedback);
sendFeedbackCall.enqueue(new Callback<MyServerResponse>() {
@Override
public void onResponse(@NonNull Call<MyServerResponse> call, @NonNull Response<MyServerResponse> response) {
if (response.isSuccessful()) {
feedback.setSent(true); // *do more actions on **that feedback object** based on the response body.*
} else {
feedback.setSent(false); // *do more actions on **that feedback object** based on the response body.*
}
}
@Override
public void onFailure(@NonNull Call<MyServerResponse> call, @NonNull Throwable t) {
feedback.setSent(false); // do more actions on **that feedback object** based on the response object.
Toast.makeText(context,"Hello",Toast.LENGTH_SHORT).show(); // use the passed argument **context**
});
}
Я отправляю несколько объектов типа Feedback на сервер последовательно, используя Retrofit, вызывая вышеуказанный метод stati c из a для l oop.
При попытке получить доступ к переданному аргументу что является обратной связью внутри функции обратного вызова, IDE заставила меня сделать переданные аргументы окончательными.
Предположение:
Теперь Предположим, каждый сетевой вызов займет, скажем, 1 секунду, пока я не получу ответ. Но, поскольку я использую для l oop для вызова метода staf c sendFeedback, он будет вызываться примерно 10 раз, прежде чем первый ответ будет получен методами обратного вызова Retrofit.
Вопрос : Поскольку метод завершится в любом случае слишком рано, прежде чем поток, инициализированный внутри него с помощью Retrofit asyn c call, возвратит ответ. Означает ли это, что работа, выполняемая внутри методов обратного вызова, будет выполняться с последним переданным аргументом типа Feedback из for для l oop или с нулевым значением, поскольку метод все равно закончился бы к тому времени?
Но я уверен, что хотя бы один переданный аргумент выживет, поскольку показан тост, использующий контекст! Пожалуйста, дайте мне объяснение.
И почему IDE заставляет меня сделать аргументы окончательными?