2010-08-31 11 views
5

Je travaille sur l'application où j'obtiens les données du serveur en utilisant l'appel de repos et l'ajoute à la vue. Je reçois toutes les données initiales correctement. J'utilise AsyncTask pour le faire.Récupération périodique de données (interrogation) à partir du serveur sous Android

Maintenant, je veux périodiquement (disons 2 minutes) aller chercher les nouvelles données du serveur et les ajouter à la vue. Récupérer périodiquement des données (interrogation) à partir du serveur dans Android.

+1

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

Répondre

1

La meilleure façon de le faire serait de créer un service qui récupère les données du serveur. Ensuite, si votre activité est en cours d'exécution, le service peut envoyer une intention à l'activité avec les données récupérées.

Ou, faites exécuter le service lorsque votre application s'exécute et que votre activité soit liée au service au démarrage. Ensuite, utilisez AIDL ou quelque chose de similaire pour communiquer avec le service.
(Par exemple, chaque fois que le service a données extraites, il peut déclencher une fonction de rappel dans votre activité)

3

Vous pouvez checkout la classe AlarmManager pour le faire.

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

est ici l'alarme Manager--

public class MyAlarmManager extends BroadcastReceiver { 

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

     } 
} 

chaque fois que l'AlarmManager est « tiré » se connecter à nouveau le serveur et remplir les données que vous venez de recevoir.

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

+0

Hi Umesh, J'ai essayé votre solution . J'utilise AlarmManager comme classe interne qui à son tour fait des appels asynchrones qui met à jour mon interface graphique. Mais j'obtiens cette erreur: "Impossible d'instancier le récepteur". J'ai ajouté ceci au fichier AndroidManifest.xml: Quel est le problème? –

+0

comme vous pouvez le voir AlarmManager est une classe publique qui étend un BroadcastReciever et doit être écrite dans un fichier différent. (Dans le cas ci-dessus le nom du fichier serait MyAlarmManager.java) Dans le fichier manifeste: \t \t \t Le garder en tant que classe interne pourrait être le problème ici. – Umesh

1

suivre le tutoriel mentionné here. C'est exactement ce que vous voulez faire. De plus, comme les appels au serveur sont faits toutes les quelques minutes, cela consomme de la batterie. Vous pouvez donc essayer les appels de serveur uniquement lorsque les données du serveur changent via les notifications Push.