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¶ms={\"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)
:
- El inicio de Backend para móviles subscribeToCloudMessage no funcionará
- Cómo crear un efecto de recuento para un textView en Android
- Retrofit y Jackson y análisis de JSON
- Uso de un adaptador de otra clase / actividad
- ¿Cómo establecer el límite de los elementos coincidentes devueltos por DynamoDB utilizando Java?
Java.lang.IllegalArgumentException: Caracteres ilegales en la consulta en el índice 59: http://www.pappico.ru/promo.php?action=RegisterUser¶ms= {"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¶ms= {"userId": 1, "userName": "Юрий + Клинских"}
No sé qué debo hacer para que funcione. Cualquier ayuda sería apreciada:)
- Cómo solucionar el error como java.lang.Throwable: setStateLocked?
- Guardar referencia de objeto en Bundle en Android
- Apache httppost cómo establecer el contenido: que tienen el par de valores de nombre apuntando a otro conjunto de pares de valor de nombre
- ¿Por qué mi contexto en mi Fragmento es nulo?
- Fabric / Crashlytics NoClassDefFoundError sólo en ciertos dispositivos
- Android consigue la altura de la bandera de adMob cuando aparece
- Cómo eliminar algunas palabras de una cadena en java
- PopUp diálogo Android de hilo de fondo
Debe codificar los parámetros de URL:
String request = baseRequestUrl + "RegisterUser¶ms=" + 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¶ms=" + 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
- Convertir jstring a QString
- ¿Cuál es la mejor manera de averiguar la nueva versión está disponible para las bibliotecas externas utilizadas en el proyecto de Android Studio