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 01/11/12, 18:47:06
Array

[xs_avatar]
sgsbarna sgsbarna no está en línea
Usuario muy activo
 
Fecha de registro: nov 2010
Localización: Montmeló
Mensajes: 605
Modelo de smartphone: GT-I9000, GT-I9001, GT-I9300, Tab2 7"
Tu operador: Vodafone
Imagen alojada en URL

Por que en según que móviles y en el emulador si funciona este código y en mi móvil con Jelly bean customizado no me funciona...

manifest; <uses-sdk
android:minSdkVersion="3"
android:targetSdkVersion="16" />

este es el código...

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.Toast;

public class Estadisticas1Eq extends Activity {
private ImageView imageView;
private Bitmap loadedImage;
private String imageHttpAddress = "aquiva el url";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.estadisticas1eq);
imageView = (ImageView) findViewById(R.id.image_view);
downloadFile(imageHttpAddress);
}

void downloadFile(String imageHttpAddress) {
URL imageUrl = null;
try {
imageUrl = new URL(imageHttpAddress);
HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
conn.connect();
loadedImage = BitmapFactory.decodeStream(conn.getInputStream());
imageView.setImageBitmap(loadedImage);
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Error cargando la imagen: "+e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
}
__________________
Piensa en verdiblanco! Descárgatela totalmente gratis!!
Responder Con Cita


  #2  
Viejo 01/11/12, 18:55:59
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
Técnicamente en ICS tampoco debería funcionarte, si te funciona en un móvil con ICS es porque ese móvil se ha saltado algunos de los "requisitos" de Google.

El problema está en que estás haciendo uso de Internet (datos en general, también valdría para red local) en el hilo principal, y a partir de ICS si quieres que la aplicación sea 100% compatible cualquier uso de Internet tiene que ser en un hilo independiente.

Creo que se aplica a cualquier cosa que sea bloqueante, pero ahora mismo lo único que se me ocurre que pueda bloquear el hilo principal es una conexión de datos.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 01/11/12, 20:20:10
Array

[xs_avatar]
superroko2 superroko2 no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Mensajes: 93
Tu operador: Movistar

Me interesa porque yo también uso ese sistema para cargar imágenes. Como debo/debemos hacer entonces para que ese sistema sea totalmente compatible con cualquier móvil? Existe algún método de cargar imágenes no muy complejo que sirva para todos en general? Gracias.
Responder Con Cita
  #4  
Viejo 02/11/12, 19:44:48
Array

[xs_avatar]
sgsbarna sgsbarna no está en línea
Usuario muy activo
 
Fecha de registro: nov 2010
Localización: Montmeló
Mensajes: 605
Modelo de smartphone: GT-I9000, GT-I9001, GT-I9300, Tab2 7"
Tu operador: Vodafone
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Técnicamente en ICS tampoco debería funcionarte, si te funciona en un móvil con ICS es porque ese móvil se ha saltado algunos de los "requisitos" de Google.

El problema está en que estás haciendo uso de Internet (datos en general, también valdría para red local) en el hilo principal, y a partir de ICS si quieres que la aplicación sea 100% compatible cualquier uso de Internet tiene que ser en un hilo independiente.

Creo que se aplica a cualquier cosa que sea bloqueante, pero ahora mismo lo único que se me ocurre que pueda bloquear el hilo principal es una conexión de datos.
A que te refieres con un hilo independiente?

Enviado desde mi GT-I9000 usando Tapatalk 2
__________________
Piensa en verdiblanco! Descárgatela totalmente gratis!!
Responder Con Cita
  #5  
Viejo 02/11/12, 21:07:40
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 sgsbarna Ver Mensaje
A que te refieres con un hilo independiente?

Enviado desde mi GT-I9000 usando Tapatalk 2
A que a partir de ICS no puedes bloquear el hilo principal, también llamado UI Thread, todo lo que tenga que ver con sockets (una conexión HTTP usa sockets) tienes que ejecutarlo fuera del hilo principal. ¿Cómo hacerlo? Pues hay muchísimas formas, para tu caso lo más sencillo es usar un AsyncTask, pero también puedes meterlo todo en un Thread y cuando la imagen se haya descargado asignársela al ImageView con un RunOnUIThread o con un Handler.

Si no te has enterado de la mitad de lo que te he puesto deberías empezar por aquí:

http://developer.android.com/guide/c...d-threads.html
Responder Con Cita
  #6  
Viejo 02/11/12, 21:38:32
Array

[xs_avatar]
sgsbarna sgsbarna no está en línea
Usuario muy activo
 
Fecha de registro: nov 2010
Localización: Montmeló
Mensajes: 605
Modelo de smartphone: GT-I9000, GT-I9001, GT-I9300, Tab2 7"
Tu operador: Vodafone
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
A que a partir de ICS no puedes bloquear el hilo principal, también llamado UI Thread, todo lo que tenga que ver con sockets (una conexión HTTP usa sockets) tienes que ejecutarlo fuera del hilo principal. ¿Cómo hacerlo? Pues hay muchísimas formas, para tu caso lo más sencillo es usar un AsyncTask, pero también puedes meterlo todo en un Thread y cuando la imagen se haya descargado asignársela al ImageView con un RunOnUIThread o con un Handler.

Si no te has enterado de la mitad de lo que te he puesto deberías empezar por aquí:

http://developer.android.com/guide/c...d-threads.html
Si si... había buscado por internet... lo tengo claro ahora toca implementarlo... pero tengo entendido el problema de pasarlo todo por el hilo principal... gracias.

Enviado desde mi GT-I9000 usando Tapatalk 2
__________________
Piensa en verdiblanco! Descárgatela totalmente gratis!!
Responder Con Cita
  #7  
Viejo 03/11/12, 12:09:12
Array

[xs_avatar]
manelizzard manelizzard no está en línea
Usuario poco activo
 
Fecha de registro: oct 2012
Localización: Barcelona
Mensajes: 40
Modelo de smartphone: HTC One X+
Tu operador: Simyo
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
A que a partir de ICS no puedes bloquear el hilo principal, también llamado UI Thread, todo lo que tenga que ver con sockets (una conexión HTTP usa sockets) tienes que ejecutarlo fuera del hilo principal. ¿Cómo hacerlo? Pues hay muchísimas formas, para tu caso lo más sencillo es usar un AsyncTask, pero también puedes meterlo todo en un Thread y cuando la imagen se haya descargado asignársela al ImageView con un RunOnUIThread o con un Handler.

Si no te has enterado de la mitad de lo que te he puesto deberías empezar por aquí:

http://developer.android.com/guide/c...d-threads.html
Solo un apunte: no puedes bloquear el UI Thread en ninguna versión de Android, no solo a partir de ICS. Si bloqueas éste thread, se producirá un error conocido como ANR (Activity Not Responding).

Como bien dice kriogeN, lo mejor es usar AsyncTask. Te dejo un tuto con mucha info por si te sirve de ayuda: http://android10.org/index.php/artic...ask-in-android

Saludos! =)
__________________
Responder Con Cita
  #8  
Viejo 03/11/12, 13:47:58
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 manelizzard Ver Mensaje
Solo un apunte: no puedes bloquear el UI Thread en ninguna versión de Android, no solo a partir de ICS. Si bloqueas éste thread, se producirá un error conocido como ANR (Activity Not Responding).

Como bien dice kriogeN, lo mejor es usar AsyncTask. Te dejo un tuto con mucha info por si te sirve de ayuda: http://android10.org/index.php/artic...ask-in-android

Saludos! =)
Pero en versiones anteriores a ICS te sale lo de "Aplicación no respondiendo. Esperar o Cerrar", y sólo sale después de 5 segundos. Si bloqueas menos de 5 segundos (un socket salvo que la conexión falle o tenga mucho peso lo que descargues debe tardar menos de 5 segundos) ni siquiera sale el cartel. Y aunque salga si le das a Esperar la aplicación sigue funcionando.

En cambio a partir de ICS ni cartel, ni 5 segundos, ni pollas, si bloqueas el hilo principal la aplicación no funciona.
Responder Con Cita
  #9  
Viejo 03/11/12, 14:24:09
Array

[xs_avatar]
manelizzard manelizzard no está en línea
Usuario poco activo
 
Fecha de registro: oct 2012
Localización: Barcelona
Mensajes: 40
Modelo de smartphone: HTC One X+
Tu operador: Simyo
Sigo pensando que ocurre en todas las versiones de Android. El ANR solo saltará cuando el hilo esté bloqueado y el usuario haga alguna acción (tocar la pantalla, pulsar un botón, etc...).

Si dejas el hilo bloqueado, pero no generas ninguna acción de usuario, el ANR no saltará y la aplicación seguirá funcionando cuando termine el procesamiento que bloquea el thread.
__________________
Responder Con Cita
  #10  
Viejo 03/11/12, 14:51:58
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 manelizzard Ver Mensaje
Sigo pensando que ocurre en todas las versiones de Android. El ANR solo saltará cuando el hilo esté bloqueado y el usuario haga alguna acción (tocar la pantalla, pulsar un botón, etc...).

Si dejas el hilo bloqueado, pero no generas ninguna acción de usuario, el ANR no saltará y la aplicación seguirá funcionando cuando termine el procesamiento que bloquea el thread.
Esto existe sólo a partir de HoneyComb, y demuestra lo que te digo:

android.os.NetworkOnMainThreadException

Uso de sockets en hilo principal = muerte. Da igual que toques la pantalla o no la toques, en cambio en GB y anteriores si está permitido, ocurriría lo que tú dices. Pero en ICS (realmente a partir de Honeycomb) no lo está.
Responder Con Cita
  #11  
Viejo 03/11/12, 15:18:59
Array

[xs_avatar]
manelizzard manelizzard no está en línea
Usuario poco activo
 
Fecha de registro: oct 2012
Localización: Barcelona
Mensajes: 40
Modelo de smartphone: HTC One X+
Tu operador: Simyo
Uop! Touché!

Desconocía que habían hecho una Exception a ese nivel. Gracias! ^^
__________________
Responder Con Cita
  #12  
Viejo 04/11/12, 11:59:56
Array

[xs_avatar]
sgsbarna sgsbarna no está en línea
Usuario muy activo
 
Fecha de registro: nov 2010
Localización: Montmeló
Mensajes: 605
Modelo de smartphone: GT-I9000, GT-I9001, GT-I9300, Tab2 7"
Tu operador: Vodafone
Por lo que veo también me pide todo este tema para lanzar twitter en la App... en Jelly Bean me peta la App. Mirando el Log Cat el fallo se concentra en el botón que te lleva a los permisos (login)... creo que si no me equivoco necesito darle/ incluir un AsyncTask en ese botón por lo menos para que llegue a la petición de permiso, verdad?
__________________
Piensa en verdiblanco! Descárgatela totalmente gratis!!
Responder Con Cita
Respuesta

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

Herramientas


Hora actual: 20:47:04 (GMT +2)



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

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