2010-08-31 868 views
5

Estoy trabajando en la aplicación donde obtengo los datos del servidor usando la llamada de reposo y la agrego a la vista. Obtengo todos los datos iniciales correctamente. Yo uso AsyncTask para hacerlo.Obtención de datos periódicamente (sondeo) desde el servidor en Android

Ahora quiero periódicamente (digamos, 2 minutos) buscar los datos nuevos del servidor y agregarlos a la vista. Obtener datos periódicamente (sondeo) del servidor en Android.

+1

la salida http://developer.android.com/reference/java/util/TimerTask.html –

Respuesta

1

La mejor manera de hacerlo sería crear un servicio que obtenga los datos del servidor. Posteriormente, si su actividad se está ejecutando, el servicio puede enviar un intento a la actividad con los datos obtenidos.

O haga que el servicio se ejecute cuando su aplicación se ejecute y su actividad se vincule al servicio cuando se inicie. Luego use AIDL o algo similar para comunicarse con el servicio.
(Por ejemplo, cada vez que el servicio ha obtenido datos, puede activar una función de devolución de llamada en su actividad)

3

Puede verificar la clase AlarmManager para hacerlo.

Intent intent = new Intent(this, MyAlarmManager.class); 

long scTime = 60*2000;//2mins 

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + scTime, pendingIntent); 

aquí está la alarma Manager--

public class MyAlarmManager extends BroadcastReceiver { 

    Context _context; 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      _context= context; 
      //connect to server.. 

     } 
} 

cuando cada vez la AlarmManager se 'disparó' conectar con el servidor de nuevo y rellenar los datos que acaba de recibir.

http://developer.android.com/reference/android/app/AlarmManager.html

+0

Hola Umesh, intentó su solución . Estoy usando AlarmManager como clase interna que a su vez realiza llamadas asincrónicas que actualizan mi GUI. Pero recibo este error: "No se puede crear una instancia del receptor". He agregado esto al archivo AndroidManifest.xml: ¿Cuál es el problema? –

+0

como puede ver AlarmManager es una clase pública que extiende un BroadcastReciever y debe escribirse en un archivo diferente. (En el caso anterior el nombre del archivo sería MyAlarmManager.java) En el archivo de manifiesto: \t \t \t \t \t manteniéndolo como una clase interna podría ser el problema aquí. – Umesh

1

seguir el tutorial mencionado here. Esto es exactamente lo que quieres hacer. Además, dado que las llamadas al servidor se realizan cada pocos minutos, esto consume batería. Para que pueda tratar de servidor llama sólo cuando cambian los datos del servidor a través de notificaciones Push ..

Cuestiones relacionadas