Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 31/05/13, 21:23:52
Array

[xs_avatar]
MixCas MixCas no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Localización: Spain
Mensajes: 310
Modelo de smartphone: Samsung Galaxy SIII && S5
Tu operador: Movistar
Como comprobar que una web esta caída.

Me explico, tengo que recoger datos de una web, pero si esta web esta caida... ¿Como lo detecto? Por que se me "peta" la aplicación... tengo la función de si esta conectado el dispositivo a wifi o 3g.. pero claro.. si la web esta caída no se como controlarlo....

A lo mejor con un simple Try... Catch.. es suficiente, pero no se si hay otra forma

Saludos ;)

Última edición por MixCas Día 31/05/13 a las 22:48:54. Razón: Ya tengo ideas :D SOlucionado :D
Responder Con Cita


  #2  
Viejo 31/05/13, 21:34:20
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Si la web está caída pueden pasar varias cosas:
- Que el servidor no responda, te saltará un timeout en algún sitio, típicamente a los 30 segundos
- Que el servidor no esté disponible o a la web le pase algo, en cuyo caso recibirás mensajes HTTP del tipo 500, 404, etc... todo menos el 200 que es que el recurso está disponible y se va a entregar.
- Que la comunicación con el servidor tenga un problema de red, te saltará una IOException

Cuando una aplicación "peta" puedes saber perfectamente por qué y hasta qué línea del código es la que ha provocado que se cierre, acostúmbrate a mirar el LogCat.

Del try/catch no te libras en cualquier caso, pero también tendrás que ver el código de la respuesta (si es 200 o no)
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 31/05/13, 21:39:34
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Si estás usando un HttpClient supongo que la respuesta de la web la guardarás en un HttpResponse.

En ese caso, con esto:

response.getStatusLine().getStatusCode()

Si el valor es distinto de 200, se ha producido un fallo.

En el caso de que el servidor no esté disponible se producirá una excepción por cumplirse el TimeOut, en ese caso necesitas el Try Catch (Java ya te obliga a usarlo si usas HttpClient.execute)

EDITO: Se adelantó mocelet.
Responder Con Cita
Gracias de parte de:
  #4  
Viejo 31/05/13, 22:48:00
Array

[xs_avatar]
MixCas MixCas no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Localización: Spain
Mensajes: 310
Modelo de smartphone: Samsung Galaxy SIII && S5
Tu operador: Movistar
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Si la web está caída pueden pasar varias cosas:
- Que el servidor no responda, te saltará un timeout en algún sitio, típicamente a los 30 segundos
- Que el servidor no esté disponible o a la web le pase algo, en cuyo caso recibirás mensajes HTTP del tipo 500, 404, etc... todo menos el 200 que es que el recurso está disponible y se va a entregar.
- Que la comunicación con el servidor tenga un problema de red, te saltará una IOException

Cuando una aplicación "peta" puedes saber perfectamente por qué y hasta qué línea del código es la que ha provocado que se cierre, acostúmbrate a mirar el LogCat.

Del try/catch no te libras en cualquier caso, pero también tendrás que ver el código de la respuesta (si es 200 o no)
Si el LogCat lo miro siempre, pero esta vez no me mostro ningún error, solo que se detuvo y fallo el hilo...

 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Si estás usando un HttpClient supongo que la respuesta de la web la guardarás en un HttpResponse.

En ese caso, con esto:

response.getStatusLine().getStatusCode()

Si el valor es distinto de 200, se ha producido un fallo.

En el caso de que el servidor no esté disponible se producirá una excepción por cumplirse el TimeOut, en ese caso necesitas el Try Catch (Java ya te obliga a usarlo si usas HttpClient.execute)

EDITO: Se adelantó mocelet.
Creo que con el Try Catch es suficiente, de todas formas, voy ha hacer unas pruebas ;)

Lo de HttpRequest no lo utilizo, solo me conecto a la web para sacar los datos .xml que es como una API y conozco las rutas jejeje



Muchas Gracias chicos!!!!
Responder Con Cita
  #5  
Viejo 05/06/13, 11:19:49
Array

[xs_avatar]
David_91 David_91 no está en línea
Usuario novato en la web
 
Fecha de registro: abr 2013
Localización: Valencia
Mensajes: 25
Modelo de smartphone: Samsung Galaxy S2
Tu operador: Orange
Que tipo de catch utilizaste para cuando el servidor no está enchufado? He probado con:

catch (ClientProtocolException e)
catch (IOException e)

Pero no me sigue petando la aplicación...
Responder Con Cita
  #6  
Viejo 05/06/13, 17:01:53
Array

[xs_avatar]
MixCas MixCas no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Localización: Spain
Mensajes: 310
Modelo de smartphone: Samsung Galaxy SIII && S5
Tu operador: Movistar
 Cita: Originalmente Escrito por David_91 Ver Mensaje
Que tipo de catch utilizaste para cuando el servidor no está enchufado? He probado con:

catch (ClientProtocolException e)
catch (IOException e)

Pero no me sigue petando la aplicación...
No entendi, con esos catch te sigue "petando" o ya no?

Pues lo he dejado en la cola de cosas que hacer, pero yo normalmente utilizo catch (Exception e) y no miro exactamente el tipo que son, salvo que me lo pida por defecto algún método...

Saludos.
__________________

Responder Con Cita
  #7  
Viejo 05/06/13, 17:08:53
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por MixCas Ver Mensaje
No entendi, con esos catch te sigue "petando" o ya no?

Pues lo he dejado en la cola de cosas que hacer, pero yo normalmente utilizo catch (Exception e) y no miro exactamente el tipo que son, salvo que me lo pida por defecto algún método...

Saludos.
Ya se lo he solucionado por privado, era porque no tenía establecidos los Timeout.

En cuanto a los Exception, yo también uso siempre Exception. Y aunque te lo pida algún método, también puedes quitar todos los que el método te sugiere y dejarlo sólo como Exception.

Y por último, es posible que aunque la conexión no se llegue a producir tampoco se produzca la excepción, y el getStatusCode() daría como resultado 0.
Responder Con Cita
  #8  
Viejo 06/06/13, 09:01:45
Array

[xs_avatar]
David_91 David_91 no está en línea
Usuario novato en la web
 
Fecha de registro: abr 2013
Localización: Valencia
Mensajes: 25
Modelo de smartphone: Samsung Galaxy S2
Tu operador: Orange
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Ya se lo he solucionado por privado, era porque no tenía establecidos los Timeout.

En cuanto a los Exception, yo también uso siempre Exception. Y aunque te lo pida algún método, también puedes quitar todos los que el método te sugiere y dejarlo sólo como Exception.

Y por último, es posible que aunque la conexión no se llegue a producir tampoco se produzca la excepción, y el getStatusCode() daría como resultado 0.
Como dice kriogeN el problema es que el timeout se tiraba no sé, quizas unos 5 minutos, por lo que Android me pedía forzar el cierre de la aplicación, pero si no lo forzaba en logcat después ya veía en que catch entraba, en el de IOException, el problema es que, como tardaba tanto en realizar el timeout, pues pensé que no funcionaba bien al no ver nada más por logcat después de entrar por el try

Gracias de nuevo kriogeN!
Responder Con Cita
  #9  
Viejo 09/06/13, 15:24:21
Array

[xs_avatar]
vzk91 vzk91 no está en línea
Miembro del foro
 
Fecha de registro: nov 2012
Mensajes: 199
Modelo de smartphone: OnePlus 6T
Tu operador: Movistar
Hola,

finalmente como resolvistes el problema ? Yo ahora mismo me encuentro en la misma situación. Mi aplicación hace muchas consultas a un servidor web, y cuando este no responde se queda "colgada" 20 o 30 segundos hasta que recibe el error para tratarlo.

20 - 30 segundos por consulta es excesivo a mi parecer....
Responder Con Cita
  #10  
Viejo 10/06/13, 10:49:38
Array

[xs_avatar]
David_91 David_91 no está en línea
Usuario novato en la web
 
Fecha de registro: abr 2013
Localización: Valencia
Mensajes: 25
Modelo de smartphone: Samsung Galaxy S2
Tu operador: Orange
public static int obtenerEstado() {
URI server = null;
try {
server = new URI("www.tuweb.com/archivo.php");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
HttpClient httpclient = new DefaultHttpClient(params);
HttpGet httpRequest = new HttpGet(server);
try {
HttpResponse response = httpclient.execute(httpRequest);
return response.getStatusLine().getStatusCode();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
Log.e("Catch", "ClientProtocolException");
return -1;
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("Catch", "IOException");
return -1;
}
}

Yo hice este método, en caso de que salga por un catch devuelvo -1 y ya lo trato donde sea necesario, en caso de ser try, devuelve el statusCode (El que te de el servidor web al que conectes) Con un timeout de 10 segundos, aun así, como comentaba en otro hilo, sigo teniendo un problema, en mi caso, esto se ejecuta en un AsyncTask, y si el servidor está caído o directamente no hay servidor, los 10 segundos del timeout la aplicación se queda congelada a pesar de que, tiene puesto una barra de progreso en el onPreExecute, supongo que será un fallo de Android, pero aquí nadie sabe resolverlo por desgracia

Espero haberte ayudado!
Responder Con Cita
  #11  
Viejo 10/06/13, 18:15:06
Array

[xs_avatar]
vzk91 vzk91 no está en línea
Miembro del foro
 
Fecha de registro: nov 2012
Mensajes: 199
Modelo de smartphone: OnePlus 6T
Tu operador: Movistar
Gracias por responder.

Mi problema estaba que yo no ajustaba los Timeout, ahora dejandolos a 5 segundos es más que suficiente para mi servidor.

El tema de que comentas que sigue dando error, yo he echo lo siguiente que igual te sirve.

El codigo codigo que me procesa el estado del servidor lo tengo en una clase. Dentro del AsyncTask creo un objeto de esta clase al que le paso como String una URL del servidor que quiero comprobar. Al crearse el objeto almaceno en una variable si el estado del servidor es TRUE o FALSE y lo obtengo con un simple metodo accesor.

En mi caso la clase que procesa el estado del servidor trata por igual todos los estados que no sean 202.

Yo de esta manera he solucionado los tiempos de carga cuando el servidor no responde, y me funciona perfectamente dentro del AsysncTask.

un saludo !
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 11:49:01 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /