PDA

Ver la Versión Completa : Descarga de archivos en android 4.1


afranco2000
06/11/12, 19:47:54
public
boolean DescargaArch(String NArch ) {
try {

URL url =

new URL(NArch);

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

urlConnection.setRequestMethod(

"GET");
urlConnection.setDoOutput(true);


//al llegar aqui marca error y se sale de la app
urlConnection.connect();
...
...
Estoy programando con eclipse , si alguien me puede ayudar ya que en un emulador con la versión 2.3 funciona correctamente y al probarlo con la versión 4.1 falla. Gracias

hecsagis
06/11/12, 20:32:27
Es porque estás bloqueando el hilo principal y no recuerdo a partir de que versión (3.0 o 4.0) si bloqueas el hilo principal la app peta.

Tienes que ejecutar la descarga en un AsyncTask o en un Thread

Celtium
06/11/12, 21:05:29
desde la version 2.3.3 android tiene un gestor de descargas. va muy bien.

;)

afranco2000
06/11/12, 21:25:07
"Tienes que ejecutar la descarga en un AsyncTask o en un Thread "
Si me puedes explicar a que se refiere esto por favor.

"desde la version 2.3.3 android tiene un gestor de descargas. va muy bien."
Y en cuanto al gestor yo quisiera hacer las descargas desde la app.

Gracias

hecsagis
06/11/12, 21:39:56
Un AsyncTask es un hilo que se ejecuta independientemente del hilo principal y de forma paralela, de forma que estás ejecutando un código concreto pero sin bloquear el hilo principal, de forma que puedes seguir usando la app sin esperar a que una actividad bloqueante finalice. En tu caso, el código que se debería ejecutar de forma paralela y que es bloqueante es la descarga de la imagen:

http://developer.android.com/reference/android/os/AsyncTask.html

Celtium
06/11/12, 23:32:38
"desde la version 2.3.3 android tiene un gestor de descargas. va muy bien."
Y en cuanto al gestor yo quisiera hacer las descargas desde la app.

El gestor de descargas no es la app de descargas... en realidad se le dice al gestor que archivo quieres descargar desde la aplicación y el gestor se encarga de todo, lo intenta hasta que lo consigue o da error. Puedes decidir donde guardarlo, como llamar al archivo, etc... todo. El gestor notifica a la app si la descarga es correcta o si esta descargándose, si da error, etc

Viene siendo como los que tienen los navegadores, gestiona las descargas en segundo plano. Hace todo el trabajo el sólito. Por algo lo incluyeron en el Android desde esa versión

No es una chapuza...

El AsyncTask es un hilo especial de Android, se ejecuta en segundo plano. Desde versiones 3 de Android ya no deja hacer en el hilo de la Activity cosas que pueden ralentizar la app. Si pones a descargar en la activivy se te puede bloquear el móvil un rato. Para evitar eso Google decidió que en vez de funcionar la app de un error y rompa.

Para que no pase hazlo en un hilo de ejecución paralelo al hilo principal (el de la activity).

Busca en google AsyncTask, hay mil turoriales. Escapa de hacer otro tipo de hilos, el propio de android es el AsyncTask, es muy completo haces casi todo y es muy facl.

;)

set92
07/11/12, 10:05:37
Todo programa esta compuesto de hilos, incluso cuando piensas que no tienes ninguna tienes un hilo principal, en android a este hilo principal tambien se le llama hilo UI, o hilo de interfaz puesto que es el unico hilo que puede modificar la interfaz, cualquier otro hilo que la intente modificar hara que la app no funcione, y en tu caso si el hilo UI o hilo main tiene que hacer una operacion que dure mas de 5segundos la app se bloqueara y le mostrara al usuario un mensaje de que la aplicacion esta tardando mucho en responder, y si quiere esperar o cerrar la app, a lo que la mayoria de usuarios le dara a cerrar, por lo que normalmente las descargas se hacen en hilos aparte y le pones una progressbar para mostrarle al usuario como va la descarga.

Aqui te dejo algunos tutoriales pero vamos que ahi muchos por ahi, y estos no tienen porque ser los mejores:
Thread: http://www.inforjmr.es/?p=551
AsyncTask: http://www.inforjmr.es/?p=556
Jugando con Threads: http://inchoo.net/mobile-development/android-development/android-threads/
Y esta que esta muy bien, 3 formas de trabajar con hilos http://androideity.com/tag/threads/

Edit: Lo que te comenta Celtium es que si solo programas para android mires solo el AsyncTask que es el propio de Android y por lo tanto mas eficiente para este, aunque yo estoy haciendo el ciclo de DAM y por lo tanto nos enseñaron hace poco los hilos en java, que son los threads y runnable, y ya en android no nos han llegado a explicar en clase AsyncTask por no tener el suficiente tiempo para todo. Si miras los hilos en java intenta hacerlo por Runnable que parece ser que es mas efectivo puesto que Thread es una clase y Runnable una interfaz y como java no acepta la herencia multiple conviene usar la mayoria de veces el Runnable.

sgsbarna
07/11/12, 20:14:11
Por si te interesa...

http://loopj.com/android-async-http/