AsyncHttpRequest POST no activar devoluciones de llamada (android-async-http por loopj)
Estoy tratando de enviar un POST a un servidor utilizando la biblioteca async http de loopj. El siguiente código es bastante estándar, pero no puedo conseguir que funcione.
He depurado bastante y he comprobado lo siguiente:
- Publicar en Ruby on Rails la aplicación de android
- Enviar formulario con datos POST en la aplicación para Android
- Servicio llamado de Android a C # no funciona
- Volley - solicitud de http en bloqueo
- {"Error": {"message": "(# 324) Requiere archivo de carga", "type": "OAuthException", "code": 324}}
- La dirección URL es correcta.
- Los parámetros son correctos y se almacenan correctamente en la variable params.
Parece que cuando HttpResponse response = client.execute(request, context);
Se llama en AsyncHttpRequest.makeRequest()
la solicitud no contiene ningún parámetro:
EDIT: Después de mirar el código un poco más, parece que los parámetros POST pueden ser incluidos en la entidad o el grupo de encabezados.
Pero el verdadero problema es que no recibo ninguna de las devoluciones de llamada (ver código abajo). La instrucción if
después de la llamada client.execute()
nunca se llama (el punto de interrupción no se activa).
RequestParams params = new RequestParams(); params.put("loginid", "user"); params.put("password", "pass"); params.put("deviceid", "deviceid"); AsyncHttpClient client = new AsyncHttpClient(); client.post(MDSettings.BASE_URL + "/user/login", params, new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { Log.d(MDSettings.TAG, "MDConnectionManager - login - response: " + response); singleton.connectionSuccessful(response, returnIndex); } @Override public void onFailure(Throwable error, String content) { Log.d(MDSettings.TAG, "MDConnectionManager - login - content: " + content); singleton.connectionFailed("Login Failed", error.getMessage(), returnIndex); } });
Estoy usando esta lib, ya que me permite enviar archivos que necesitaré más tarde en este proyecto. Si hay otro lib que hace lo mismo (y realmente funciona) que estaría bien conmigo.
Mi pregunta es: ¿Por qué no recibo ninguna devolución de llamada y cómo puedo solucionar esto? Dime cuando algo no está claro y voy a tratar de explicar con más profundidad.
- Uso de Jsoup en los datos de inicio de sesión de POST
- Publicar un servicio JSONArray en WCF desde android
- Transferencia de JSON al servidor en la solicitud de correo
- ¿Cómo envío un archivo en Android desde un dispositivo móvil al servidor mediante http?
- Cómo enviar datos al sitio web mediante la aplicación android
- Enviar cookies con http post android
- Android Retrofit | Publicar objeto personalizado (enviar json al servidor)
- ¿Cómo usar 'POST' Http Verbo de Woocommerce REST API en JAVA / Android?
Parece que mi entrada de android.permission.INTERNET
fue eliminada del archivo de manifiesto. Después de añadirlo de nuevo todo funcionó como se esperaba. Cada vez que algo no funciona, estaré revisando mis permisos.
Pruebe este simple fragmento.
Esto funciona en mi dispositivo.
Se imprime "Fallo" como POST no está permitido (estado HTTP: 405)
AsyncHttpClient client = new AsyncHttpClient(); RequestParams params = new RequestParams(); params.put("q", "google"); client.post("http://google.com", params, new AsyncHttpResponseHandler(){ public void onSuccess(String arg0) { Log.d("TAG", "Success"); }; public void onFailure(Throwable arg0, String arg1) { Log.d("TAG", "Failure"); }; });
Bueno, yo no sé nada de esta biblioteca, pero ¿por qué no tratar de hacer algo similar a ella, utilizando AsyncTasks? Por ejemplo, puede subclasificar AsyncTask y proporcionarle URL que cargar. Otra forma es subclasificar AsyncTask y proporcionarle un objeto Callable. Este enfoque le permitirá generalizar esta clase haciéndola adecuada para realizar diferentes tareas de larga duración, no sólo las solicitudes de red. Ambos métodos pueden utilizar alguna interfaz con callbacks (onSuccess, onFailure). Y en onPostExecuteMethod puede determinar si se produjo un error durante la ejecución de la tarea o no y proporcionar callback neede.
Aquí en su código usted llama directamente el responsehanlder del método del poste. primero:
client.post(MDSettings.BASE_URL + "/user/login", params, responseHandler);
En la siguiente línea sólo tiene que añadir get método
client.get(MDSettings.BASE_URL + "/user/login", new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { System.out.println(response); } });
Entonces u obtendrá respuesta de ella
- ¿Hay una API de desarrolladores de Android Spotify?
- Android Studio, 9 Patch y el botón "Show Bad Patches". ¿Cómo lo sabe?