Как сохранить значение переменной внутри вызова Retrofit?


Я пытаюсь получить значение определенного поля из заголовка, используя вызов Retrofit, который будет использоваться для отправки обратно на сервер. Я успешно получаю значение внутри блока try и немедленно отправляю его обратно в блок try. Но когда я пытаюсь сделать то же самое вне экземпляра вызова, значение abc (где я назначил значение заголовка ответа) теряется. Я уже объявил строку abc в качестве глобальной переменной. Как сохранить значение строки?

public class MainActivity extends AppCompatActivity {
    private static final String LOG_TAG = "MainActivityClass";
    String abc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

        Call<List<TrendingModel>> call = apiService.getAllTodos();
        call.enqueue(new Callback<List<TrendingModel>>() {
            @Override
            public void onResponse(Call<List<TrendingModel>> call, Response<List<TrendingModel>> response) {
                try {

                    List<TrendingModel> todoModels = response.body(); // WHERE WE GET THE RESPONSE BODY
                    abc = response.headers().get("Tanand"); // WHERE WE GET THE RESPONSE HEADER AND ASSIGN IT TO abc, WHICH WE DECLARED GLOBALLY

                    ApiClient.getClient(abc).create(ApiInterface.class); // PASSING THE abc VARIABLE TO THE GETCLIENT(TOKEN) METHOD WITHIN
                                    // THE SAME TRY BLOCK WHICH WORKDS

                } catch (Exception e) {
                    Log.d("onResponse", "There is an error");
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<List<TrendingModel>> call, Throwable t) {
                Log.d("onFailure", t.toString());
            }
        });

        ApiClient.getClient(abc).create(ApiInterface.class); // VALUE OF abc IS NOT PERSISTED HERE (abc IS NULL) ALTHOUGH WE DECLARED IT GLOBALLY
    }
}
1 2

1 ответ:

Попробуйте вызвать метод внутри метода OnResponse .

Потому что метод onResponse() работает в фоновом режиме, пока данные не будут извлечены.

Если вы хотите получить доступ к данным ответа, то вызовите свой метод внутри него .

Ивне всех операторов вызываются до завершенияданных ответа , поэтому онне дает вам фактических данных . В качестве хорошей практики используйте следующий метод.

Просто Создайте метод внутри класс и вызовите все ваши утверждения внутри него.

Теперь вызовите свой метод внутри метода onResponse .