URL de caracteres ilegales

Aquí está mi código:

HttpClient client = new DefaultHttpClient(); client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android"); HttpGet request = new HttpGet(); request.setHeader("Content-Type", "text/plain; charset=utf-8"); Log.d("URL", convertURL(URL)); request.setURI(new URI(URL)); HttpResponse response = client.execute(request); bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer stringBuffer = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); 

No sé qué error en mi URL:

http://localhost/CyborgService/chatservice.php?action=recive_game&nick_sender=mkdarkness&pass=MV030595&date_last=2012-11-18 09:46:37&id_game=1

Ya he utilizado una función para convertir la URL, pero no ha funcionado. Pero, si intento abrir esta URL en mi navegador, se abre correctamente.

Aquí está mi error:

 11-18 21:46:37.766: E/GetHttp(823): java.net.URISyntaxException: Illegal character in query at index 127: http://192.168.0.182/CyborgService/chatservice.php?action=recive_game&nick_sender=mkdarkness&pass=MV030595&date_last=2012-11-18 09:46:37&id_game=1 

Hay un espacio en su URL, en la posición 127. La fecha se genera como "date_last = 2012-11-18 09:46:37", lo que provoca un error al abrir la URL.

Los espacios no se aceptan formalmente en las URL, aunque su navegador lo convertirá felizmente en "% 20" o en "+", ambas representaciones válidas de un espacio en una URL. Deberías escapar de todos los caracteres: puedes reemplazar el espacio con "+" o simplemente pasar la String a través de URLEncoder y terminar con ella.

Para utilizar URLEncoder ver por ejemplo esta pregunta : codificar con URLEncoder sólo los valores de los parámetros, no la URL completa. O utilice uno de los constructores para URI que tienen algunos parámetros, no uno solo. No estás mostrando el código que construye la URL, así que no puedo comentarlo explícitamente. Pero si usted tiene un mapa de parámetros parameterMap sería algo como:

 String url = baseUrl + "?"; for (String key : parameterMap.keys()) { String value = parameterMap.get(key); String encoded = URLEncoder.encode(value, "UTF-8"); url += key + "&" + encoded; } 

Otro día podemos hablar de por qué Java requiere para configurar la codificación y luego requiere que la codificación sea "UTF-8", en lugar de simplemente usar "UTF-8" como la codificación por defecto, pero por ahora este código debería hacer el truco .

Hay un carácter de espacio en blanco:

...2012-11-18 09:46:37... (en el índice 127, al igual que el mensaje de error dice).

Intenta reemplazarlo con %20

Hacer de esta manera que sin duda le ayudará

  HttpClient myClient = new DefaultHttpClient(); HttpPost myConnection = new HttpPost("http://192.168.1.2/AndroidApp/SendMessage"); try { //Your parameter should be as.. List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("messageText", msgText)); nameValuePairs.add(new BasicNameValuePair("senderUserInfoId", loginUserInfoId)); //set parameters to ur URL myConnection.setEntity(new UrlEncodedFormEntity(nameValuePairs)); //execute the connection HttpResponse response = myClient.execute(myConnection); } catch (ClientProtocolException e) { //e.printStackTrace(); } catch (IOException e) { //e.printStackTrace(); } 
  • OpenCV "Hello World" ejemplo para Android
  • 'While' no puede completar sin lanzar una excepción - Android
  • No se puede ejecutar el proyecto en Android Studio (libGDX)
  • Android OpenGL ES 2.0: El modelo de cubo no sólo está distorsionado (la perspectiva es incorrecta?), Sino también las caras se cargan incorrectamente (los vértices no son correctos?)
  • Cómo agregar opciones al menú contextual 'Editar texto' de Android
  • Cómo hacer una clase interna Parcelable
  • Tabs + Deslizar en Android para todos los niveles de API
  • Cómo recuperar Twitter y Facebook Autenticación y Token a través de las clases de Administrador de cuentas de Android
  • NullPointerException intentando recuperar savedInstanceState con una matriz de clase personalizada
  • Cómo escribir una base de datos en un archivo de texto en android
  • Cancelar En la suscripción de facturación de aplicaciones en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.