Я использую Volley в качестве библиотеки HTTP для управления своим веб-общением, и она прекрасно работает, поскольку каждый респонент, с которым я обычно работаю, это либо JSON, либо String.
Единственная проблема, с которой у меня возникают проблемы, - это конкретный вызов, который отвечает массивом JSON, который анализируется правильно, но я не могу вернуть "проанализированное" значение, так как возврат происходит до вызовазавершено, заканчивая как null
.
Вот код:
private ArrayList <User> users;
public ArrayList<User> searchUser(final String usernamestart){
users= new ArrayList<>();
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String serverResponse) {
parseUsers(serverResponse);
// see following snippet
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Toast.makeText(context, "Unable to retrieve data", Toast.LENGTH_LONG).show();
}
}) {
// parameters of POST request
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("session_id", session_id);
params.put("usernamestart", usernamestart);
return params;
}
};//closes string request
VolleyQueue.add(request);
return users;
}
для анализа ответа и отлично работает, я использую:
private void parseUsers(String jsonResponse){
try {
JSONObject jsonObject = new JSONObject(jsonResponse);
JSONArray array= jsonObject.getJSONArray("users");
for(int i=0; i < array.length(); i++){
JSONObject pointedUser= array.getJSONObject(i);
String username= pointedUser.getString("name");
String picture= pointedUser.getString("picture");
users.add(new User(username, picture));
}
}catch (JSONException e){
e.printStackTrace();
}
}
Проблема в том, что return users
происходит до завершения разговора.Я не могу вернуть ArrayList users
внутри onResponse
, поскольку это пустой метод ... Я не могу найти никакого решения для этого.
Я пробовал также синхронный вызов, но это не то, чтоЯ хочу.То, что я хотел бы, - метод Volley, который уведомляет меня, когда вызов выполнен, но это еще не то, что реализовано.Надеюсь, что кто-то может помочь мне без необходимости кардинально менять свой актив!