Как сделать так, чтобы serverAnswer передавался вне onResponse?
А то получается так, что в onResponse в serverAnswer кладутся данные, но вне onResponse переменная serverAnswer пустая.
Допустим, если выводить Toast с serverAnswer в onResponse, то выведется нужный текст, а если, допустим, выводить Toast вне onResponse, то выведется пустота.
И addUser передает пустую строку.
public String addUser(final String username, final String email, final String password, final Context context) {
StringRequest request = new StringRequest(Request.Method.POST,
REGISTER_URL,
new Response.Listener<String>() {
@Override
public void onResponse(final String response) {
try {
JSONObject jsonObject = new JSONObject(response);
final JSONObject status = jsonObject.getJSONObject("Result");
serverAnswer = status.getString("Server answer");
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
serverAnswer = error.getMessage();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put(KEY_USERNAME, username);
params.put(KEY_EMAIL, email);
params.put(KEY_PASSWORD, password);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(context);
requestQueue.add(request);
return serverAnswer;
}
У Вас асинхронный запрос, поэтому везде по коду, до момента выполнения запроса, serverAnswer
будет пустой. Метод addUser(...)
возвращает значение до того, как с сервера пришел ответ.
Предложу пару вариантов:
В метод addUser(...)
можете передавать коллбэк:
public interface OnRequestFinishedListener {
void onResponse(String serverAnswer);
}
public void addUser(..., OnRequestFinishedListener onRequestFinishedListener) {
...
}
и после ответа сервера вызывать соответствующий метод:
onRequestFinishedListener.onResponse(serverAnswer);
Можно выполнить запрос синхронно, но тогда придется самому возиться с созданием фонового потока, в котором будет выполняться метод.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Прошу сообщество помочь мне в собрании пазла из всех этих технологий, понятий, разработок пестрящих в сети и уложить в моей голове понимание...
Есть иерархия классов указанная ниже, для сериализации хватит ли имплиментировать Serializable только классу A, для сериализации классов типа...
Есть 2 сущьности User и RoleМне нужно сделать выборку User что бы Role которая у User на полях тоже инициализировалась