2010-08-31 9 views
5

Pracuję nad aplikacją, w której pobieram dane z serwera za pomocą reszta połączenia i dodaje ją do widoku. Dostaję wszystkie początkowe dane poprawnie. Używam AsyncTask do robienia tego.Okresowe pobieranie danych (odpytywanie) z serwera w Androidzie

Teraz chcę okresowo (powiedzmy 2 minuty) pobrać nowe dane z serwera i dodać go do widoku.Porcjonalnie pobieranie danych (odpytywanie) z serwera w systemie Android.

+1

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

Odpowiedz

1

Najlepszym sposobem na zrobienie tego byłoby stworzenie usługi, która pobiera dane z serwera. Po zakończeniu aktywności, usługa może wysłać zamiar do działania z pobranymi danymi.

Możesz również uruchomić usługę, gdy aplikacja działa, a Twoja działalność wiąże się z usługą podczas jej uruchamiania. Następnie użyj AIDL lub czegoś podobnego do komunikacji z usługą.
(Na przykład za każdym razem, gdy usługa pobiera dane, może wystrzelić funkcję zwrotną w swojej aktywności)

3

Możesz to zrobić, wykonując klasę AlarmManager.

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

oto alarm Manager--

public class MyAlarmManager extends BroadcastReceiver { 

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

     } 
} 

gdy kiedykolwiek AlarmManager jest „zwolniony” połączyć się z serwerem i ponownie wypełnić dane, które właśnie otrzymałem.

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

+0

Witaj Umesh, Wypróbowałem Twoje rozwiązanie . Używam programu AlarmManager jako wewnętrznej klasy, która z kolei wykonuje połączenia asynchroniczne, które aktualizują mój interfejs GUI. Ale otrzymuję ten błąd: "Nie można utworzyć instancji odbiornika". Dodałem to do pliku AndroidManifest.xml: Co to za problem? –

+0

jak widać AlarmManager jest klasą publiczną, która rozszerza BroadcastRalever i musi być zapisany w innym pliku. (W powyższym przypadku nazwa pliku będzie MyAlarmManager.java) W pliku manifestu: \t \t \t \t \t utrzymanie go jako wewnętrznej klasy może być problemem tutaj. – Umesh

1

śledzić tutorial wspomniano here. Dokładnie to chcesz zrobić. Ponadto, ponieważ wywołania serwerów są wykonywane co kilka minut, zużywa to baterię. Możesz więc próbować połączeń serwerowych tylko wtedy, gdy dane serwera zmieniają się za pomocą powiadomień Push.

Powiązane problemy