В приведенном ниже коде я пытаюсь отправить HttpRequest в мой API, чтобы получить местоположения, которые называются JSONArray. Я использую библиотеку Volley и JsonArrayRequest. Проблема в том, что когда я устанавливаю свою локальную переменную JSONArray в лямбде, у меня есть правильное значение, но когда я возвращаю его в конце функции, объект становится нулевым. Я предполагаю, что возврат выполняется до завершения запроса, но я могу ошибаться.
private RequestQueue requestQueue; //<----Global
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
setContentView(R.layout.activity_map);
//Initialization of RequestQueue Object
requestQueue = Volley.newRequestQueue(getApplicationContext());
}
//Setting map settings, checking permissions etc..
private JSONArray getUsersLocation() {
AtomicReference<JSONArray> result = new AtomicReference<>(new JSONArray());
JsonArrayRequest request = new JsonArrayRequest
(Request.Method.GET, API_URL + "getLocations", null, response -> {
result.set(response);
//Here I have correct value of result (JSONArray)
System.out.println(result.get());
},
error -> {
Toast.makeText(getApplicationContext(), "Cannot update users' location :" + error, Toast.LENGTH_LONG).show();
});
requestQueue.add(request);
return result.get(); //<----- Here my result is NULL
}
Я ожидаю, что функция getUsersLocation () вернет объект JSONArray, который приходит из ответа.