Android: сохранение части ответа Http-запроса на переменную класса - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть что-то, что звучит как очень тривиальный вопрос для меня, но у меня возникают трудности с этим. Я создаю приложение и мне нужно сделать запрос к серверу (используя Volley на данный момент) и сохранить одно из значений, возвращаемых запросом, в класс, с которого я делаю запрос. Целью этого является использование указанного значения в операторе if в другой части приложения.

Как я уже сказал, я в настоящее время использую залп, и у меня сейчас есть ( очень примерно)

private String varIWantToChange;

private void methodThatMakesTheRequest(){
    RequestQueue queue = Volley.newRequestQueue(context);JsonObjectRequest request = new JsonObjectRequest(serverUrl, null, new Response.Listener<JSONObject>() {
        @Overridepublic void onResponse(JSONObject response) {
            //if response is not null
            //make changes to the UI, I have no problem with that
            varIWantToChange = "value extracted from JSONObject response";
        }, new Response.ErrorListener() {
            // (...)
        }
    }
    queue.add(request);
}

private void methodWhereVarShouldBeChecked(){
    //but since I am trying to assign a value to my variable in the async method
    //its value only changes in the scope of the new JSONObjectRequest
    if(varIWantToChange.equals("a"){
        // ...
    } else {
        // ...
    }
}

Я огляделся по сторонам, и единственное, что мне удалось найти, - это люди, которые предлагали сделать синхронный звонок, что заставило бы мое приложение ненадолго зависнуть, и лайки, которых я хотел бы избежать, и которые в целом звучали неправильно. Извиняюсь за то, что звучит для меня как тривиальный вопрос.

1 Ответ

0 голосов
/ 01 ноября 2018

вы можете установить methodThatMakesTheRequest в фоновом сервисе и периодически вызывать его, а внутри класса сервиса установить общедоступную статическую строку String varIWantToChange, тогда в любом месте кода, который вы можете проверить

if(ServiceClass.varIWantToChange.equals("a"){
        // ...
 } else {
        // ...
}
...