Foros del Web » Programando para Internet » Android »

Conexión a BD remota y dudas con AsyncTask

Estas en el tema de Conexión a BD remota y dudas con AsyncTask en el foro de Android en Foros del Web. Hola a todos. Estoy haciendo una aplicación Android donde necesito conectarme a una base de datos SQL Server a través de Wi-Fi en una LAN ...
  #1 (permalink)  
Antiguo 12/09/2014, 07:58
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 9 meses
Puntos: 26
Conexión a BD remota y dudas con AsyncTask

Hola a todos.

Estoy haciendo una aplicación Android donde necesito conectarme a una base de datos SQL Server a través de Wi-Fi en una LAN para tomar datos de allí y guardarlos en el dispositivo con SQLite.

Luego de algunos intentos, logré hacer la conexión a SQL Server desde el teléfono. El problema es que me vi obligado a utilizar la clase AsyncTask para conseguirlo, y no termino de comprender cómo debería utilizar dicha clase.

Si yo tengo una clase (por ejemplo, BaseDeDatos) y desde ella quiero realizar múltiples tareas que involucran al servidor SQL Server (por ejemplo, probar la conexión al servidor, guardar registros, leer registros, eliminar, etc.), se supone que debería realizar cada una de estas tareas dentro del método doInBackground() de una clase que herede de AsyncTask para evitar que el hilo principal se congele, pero ¿no es muy "engorroso" crear una nueva clase que extienda a AsyncTask e implementar el método doInBackground() por cada método de mi clase BaseDeDatos que quiera ejecutar? ¿no existe una forma de decir "ejecútame determinados métodos en una tarea asíncrona"?

Supongo que hay algo que no estoy entendiendo bien, ya que me parece muy poco práctico añadir tanto código repetido sólo para ejecutar tareas que en mi aplicación serán relativamente comunes.

Desde ya, muchas gracias. Saludos.
  #2 (permalink)  
Antiguo 12/09/2014, 12:33
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Conexión a BD remota y dudas con AsyncTask

1. Lamento decepcionarte pero no es así de simple, no puedes conectarte directamente a tu base de datos remotamente. Vas a tener que montar tu webservice para eso.

2. El objetivo de usar AsyncTask es poner las tareas potencialmente lentas en otro thread separado del mainThread para que la aplicación sea responsiva y ademas porque si no haces esto, android al ver que tardaste mas de X segundos en ejecutar una tarea automáticamente mata la aplicación y te pone el mensaje de 'Esta aplicación ha terminado inesperadamente'.

En si, Java se me hace un lenguaje bastante engorroso. Pero así es como funciona en Java.
  #3 (permalink)  
Antiguo 12/09/2014, 13:42
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 9 meses
Puntos: 26
Respuesta: Conexión a BD remota y dudas con AsyncTask

Gracias por responder, razpeitia.

No entiendo por qué dices que no puedo conectarme directamente a mi base de datos, porque lo he hecho e incluso leí registros de una tabla y los inserté con SQLite en el teléfono, para luego leerlos desde allí. Mi único problema es que no me convence la forma en que debo usar AsyncTask (una implementación de doInBackground() por cada operación con la BD), quizás sea mejor usar la clase Thread, aunque por lo que he leído en general se recomienda AsyncTask.
  #4 (permalink)  
Antiguo 12/09/2014, 14:32
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
Respuesta: Conexión a BD remota y dudas con AsyncTask

Y construir la query antes de llamar al asyncTask?

Código Java:
Ver original
  1. private class clase extends AsyncTask<String, Void, Boolean> {
  2.     public Boolean doInBackground(String... params) {
  3.         String query = params[0];
  4.        
  5.         return ejecutar(query);
  6.     }
  7.    
  8.     public void onPostExecute(Boolean result) {
  9.         if(result) {
  10.             //exito
  11.         } else {
  12.             //error
  13.         }
  14.     }
  15. }

y al llamarlo

Código Java:
Ver original
  1. ...
  2. String query = "SELECT * FROM MI_TABLA";
  3. clase miAsyncTask = new clase().execute(query);
  4. ...

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #5 (permalink)  
Antiguo 01/10/2014, 01:03
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 4 meses
Puntos: 37
Respuesta: Conexión a BD remota y dudas con AsyncTask

Quiza esto te aumente las dudas
http://www.proyectosimio.com/program...cumentos-json/

En mi caso preferi generar webservices desde .net y que generaran respuestas JSON

Desde android desde las diferentes activities llamo a la clase que implementa Asynctask y genero el arraylist como lo dice el ejemplo, ya luego en cada activity ejecuto el metodo de parseo para la carga de los listview.

Etiquetas: androi, bar, bd, dudas, intent, remota
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:12.