2010-08-31 2 views
5

Io lavoro sull'app in cui ottengo i dati dal server utilizzando la chiamata di riposo e la aggiungo alla vista. Ottengo tutti i dati iniziali correttamente. Io uso AsyncTask per farlo.Recupero periodico di dati (polling) dal server in Android

Ora voglio periodicamente (diciamo 2 minuti) recuperare i nuovi dati dal server e aggiungerlo alla vista. Recupero periodico dei dati (polling) dal server in Android.

+1

check out http://developer.android.com/reference/java/util/TimerTask.html –

risposta

1

Il modo migliore per farlo sarebbe creare un servizio che recuperi i dati dal server. Successivamente, se l'attività è in esecuzione, il servizio può inviare un tentativo all'attività con i dati recuperati.

Oppure, il servizio viene eseguito quando l'app viene eseguita e l'attività si associa al servizio all'avvio. Quindi utilizzare AIDL o qualcosa di simile per comunicare con il servizio.
(Ad esempio, ogni volta che il servizio recupera dati, può attivare una funzione di richiamata nella propria attività)

3

È possibile eseguire il checkout della classe AlarmManager per farlo.

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); 

ecco l'allarme Manager--

public class MyAlarmManager extends BroadcastReceiver { 

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

     } 
} 

quando mai l'AlarmManager è 'sparato' la connessione al server di nuovo e popolare i dati appena ricevuto.

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

+0

Ciao Umesh, Ho provato la tua soluzione . Sto usando AlarmManager come classe interna che a sua volta fa chiamate asincrone che aggiornano la mia GUI. Ma sto ricevendo questo errore: "Impossibile istanziare il ricevitore". Ho aggiunto questo al file AndroidManifest.xml: Qual è il problema? –

+0

come si può vedere AlarmManager è una classe pubblica che estende BroadcastReciever e deve essere scritta in un file diverso. (Nel caso di cui sopra il nome del file sarebbe MyAlarmManager.java) Nel file manifest: \t \t \t \t \t mantenendolo come una classe interna potrebbe essere il problema qui. – Umesh

1

seguire il tutorial menzionato here. Questo è esattamente quello che vuoi fare. Inoltre, poiché le chiamate al server vengono effettuate ogni pochi minuti, questo consuma batteria. Quindi puoi provare per le chiamate al server solo quando i dati del server cambiano tramite le notifiche Push.