Как сохранить значение переменной внутри вызова 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 ответ:
Попробуйте вызвать метод внутри метода OnResponse .
Потому что метод
onResponse()
работает в фоновом режиме, пока данные не будут извлечены.Если вы хотите получить доступ к данным ответа, то вызовите свой метод внутри него .
Ивне всех операторов вызываются до завершенияданных ответа , поэтому онне дает вам фактических данных . В качестве хорошей практики используйте следующий метод.
Просто Создайте метод внутри класс и вызовите все ваши утверждения внутри него.
Теперь вызовите свой метод внутри метода onResponse .