Obtiene la respuesta JSON que contiene la list de usuarios de Github usando AsyncHttpClient

Estoy tratando de get una respuesta con la list de usuarios json de github api.

¿Podría alguien decirme el motivo por el cual la ruta de ejecución del código no llega a los methods anulados onFailure () y onSuccess ?

public String getResponse() { AsyncHttpClient client=new AsyncHttpClient(); RequestParams params=new RequestParams(); params.put("since","0"); client.get("https://api.github.com/users", params, new AsyncHttpResponseHandler() { @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { userList.clear(); userList.addFirst("Items didn't load properly"); } @Override public void onSuccess(int arg0, Header[] arg1, byte[] arg2) { try { content = new String(arg2, "UTF-8"); //content is json response that can be parsed. } catch (UnsupportedEncodingException e1) { userList.clear(); userList.add("Some encoding problems occunetworking"); e1.printStackTrace(); } } }); return content; } 

Estos methods simplemente ignoran por alguna razón. Después de client.get (…) salta a la derecha para devolver el contenido .

Alguna idea sobre el motivo? ¿Qué estoy haciendo mal?

Agradecería cualquier consejo.


EDITAR: ¿ Entonces la forma correcta de hacerlo es operar con respuesta dentro del método onSuccess (…) ?

  @Override public void onSuccess(int arg0, Header[] arg1, byte[] arg2) { try { content = new String(arg2, "UTF-8"); //content is json response that can be parsed. parseResponseAmount(content, 10); //operate with response } catch (UnsupportedEncodingException e1) { userList.clear(); userList.add("Some encoding problems occunetworking"); e1.printStackTrace(); } } 

Y trato de analizar información de respuesta como:

 private void parseResponseAmount (String response, int amount) { try { JSONArray readerArray = new JSONArray(response); for (int i = 0; i < amount; i++) { JSONObject userObject = (JSONObject) readerArray.get(i); String login = userObject.getString("login"); getUserList().add(login); } } catch (JSONException e) { // TODO Auto-generated catch block getUserList().clear(); getUserList().add("Failed to parse response"); e.printStackTrace(); } } 

pero ese código todavía no funciona. En el desarrollo impulsado por events, es causado por el movimiento del mouse, las pulsaciones de teclas, etc. ¿Qué causa estos onSuccess () y onFailure () ? ¿Cuál es la precondición?

Estás usando AsyncHttpClient. ¿Sabes lo que significa " Async "?

Es un acortamiento de " asíncrono ", que significa "que ocurre independientemente del flujo principal del progtwig". El hilo principal del progtwig no esperará a que AsyncHttpClient complete su request antes de continuar. Es por eso que su método getResponse() regresa inmediatamente.

Debes diseñar tu aplicación para que funcione según los principios de progtwigción orientados a events ; esto significa, en su caso, que engendraría cualquier process o método que necesite para manejar la respuesta del método de interfaz onSuccess() .

Entonces, probablemente no devolverá nada de getResponse() . Puedes dejarlo void . El AsyncHttpResponseHandler() que está instanciando y pasando al método get() es una interfaz a la que la biblioteca llamará cuando AsyncHttpResponseHandler() ciertos events, es decir, cuando la request GET tenga éxito o falle.

Finalmente, tendrá que mostrar sus datos de alguna manera. Supongo que está en un ListView? De ser así, deberá notificar a ListView que sus datos han cambiado (o posiblemente recrear el adaptador con nuevos datos). Ver esta pregunta Además, no estoy seguro, pero es posible que deba usar runOnUIThread() para actualizar sus vistas, ya que esto se ejecuta en un hilo diferente.