Android java.lang.IllegalArgumentException in HttpGet

Estoy tratando de obtener respuesta de servidor remoto. Aquí está mi código:

private static String baseRequestUrl = "http://www.pappico.ru/promo.php?action="; @SuppressWarnings("deprecation") public String executeRequest(String url) { String res = ""; HttpClient httpClient = new DefaultHttpClient(); HttpResponse response; try { //url = URLEncoder.encode(url, "UTF-8"); HttpGet httpGet = new HttpGet(url); response = httpClient.execute(httpGet); Log.d("MAPOFRUSSIA", response.getStatusLine().toString()); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream inStream = entity.getContent(); res = streamToString(inStream); inStream.close(); } } catch (Exception e) { e.printStackTrace(); } return res; } public String registerUser(int userId, String userName) { String res = ""; String request = baseRequestUrl + "RegisterUser&params={\"userId\":" + userId + ",\"userName\":\"" + userName + "\"}"; res = executeRequest(request); return res; } 

Y estoy recibiendo la siguiente excepción en la línea HttpGet httpGet = new HttpGet(url) :

Java.lang.IllegalArgumentException: Caracteres ilegales en la consulta en el índice 59: http://www.pappico.ru/promo.php?action=RegisterUser&params= {"userId": 1, "userName": "Юрий Клинских"}

¿Qué tiene de malo el carácter '{'? Ya he leído algunas publicaciones acerca de esta excepción y he encontrado una solución, pero esta solución causa otra excepción: si me uncommet línea url = URLEncoder.encode(url, "UTF-8"); Se craquea en response = httpClient.execute(httpGet); línea response = httpClient.execute(httpGet); Con tal excepción:

Java.lang.IllegalStateException: El host de destino no debe ser nulo o configurado en parámetros. Esquema = null, host = null, path = http://www.pappico.ru/promo.php?action=RegisterUser&params= {"userId": 1, "userName": "Юрий + Клинских"}

No sé qué debo hacer para que funcione. Cualquier ayuda sería apreciada:)

Debe codificar los parámetros de URL:

 String request = baseRequestUrl + "RegisterUser&params=" + java.net.URLEncoder.encode("{\"userId\":" + userId + ",\"userName\":\"" + userName + "\"}", "UTF-8"); 

Tratar:

 public String registerUser(int userId, String userName) { String res = ""; String json = "{\"userId\":" + userId + ",\"userName\":\"" + userName + "\"}"; String encodedJson = URLEncoder.encode(json, "utf-8"); String request = baseRequestUrl + "RegisterUser&params=" + encodedJson; res = executeRequest(request); return res; } 

(Esto codifica el fragmento de URL en params = …), en lugar de toda la URL. También puede echar un vistazo a los posibles duplicados mencionados anteriormente.


Bonus: Tenga en cuenta que JSON normalmente se transfiere a través de POST (en lugar de GET). Puede utilizar un programa como "Encabezados en vivo" y hacer los pasos manualmente (por ejemplo, registrar un usuario) para ver lo que está sucediendo detrás de las escenas. En este caso, enviaría {..} información en el cuerpo de la entidad. Aquí hay una manera de hacerlo: HTTP POST usando JSON en Java

Además, otro enfoque para escribir JSON (especialmente cuando se vuelve más complicado) es usar una clase de modelo y luego un ObjectMapper (como Jackson) para convertirlo en una cadena. Esto es útil porque evita tener formato como \ "en las cadenas.

He aquí algunos ejemplos de esto: JSON a Java Objects, la mejor práctica para modelar el flujo json

  • Android, org.simpleframework.xml Existencia de persistencia, Elemento 'foo' ya se utiliza
  • Cómo obtener versionCode y VersionName de Google Play
  • JAudioTagger Android - No se pudo encontrar la clase 'sun.nio.ch.DirectBuffer'
  • Imagen umbral con opencv (Java)
  • Android: Bucle a través de una matriz de cadenas - ayuda necesaria en lógica para el método de intención
  • Ejecución de pruebas de Junit de Android desde la línea de comandos
  • Programáticamente eliminar SMS no funciona
  • Icu4j es demasiado grande, cualquier alternativa?
  • ¿Aparejos rizados en "nueva" expresión? (Por ejemplo, "new MyClass () {...}")
  • Java.lang.NullPointerException: Intento de obtener longitud de matriz nula
  • Creación de varios objetos utilizando el bucle for
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.