I'd like to send http requests every N seconds. The response should be shown is some textViews. I've used timer. I guess a simple loop is not a good way.
I got error that "Can't create handler inside thread that has not called Looper.prepare()"
My test Async requests in main activity (not in timer thread) work okay, and I can see responses in textView.
My code is below:
    private void runTimer() {
    MyTimerTask myTask = new MyTimerTask();
    Timer myTimer = new Timer();
    myTimer.schedule(myTask, 3000, 1500);
}
class MyTimerTask extends TimerTask {
    public void run() {
        asyncGetRequest();
    }
}
private void asyncGetRequest(){
  new DownloadWebPageTask().execute("http://www.google.com");
}
 ....
//this method is called automatically after receiving http response
@Override
protected void onPostExecute(String result) {
    someTextView.setText("some text");
}
Thanks!!!
@@@@@@@@@@@@@@@@@@@@@@@@@@@ UPDATED!!! Now it works!!!! @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ UPDATED!!! Now it works!!!! @@@@@@@@@@@@@@@@@@@@@@@@@@@
I tried different examples of AlarmManagers. They don't work. But this one works (answer number 4 there) Alarm Manager Example
My code to get HTTP responses periodically is below. It works! But it works only once. (even if I comment the line with
context.unregisterReceiver( this )
So I run "runAlarm()" after getting HTTP response. So it is recursive performance. Will I have stack overflow at least? Any comments, please? Thanks!
    public void SetAlarm()
{
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override public void onReceive( Context context, Intent _ )
        {
            asyncGetRequest();
            Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show();
            context.unregisterReceiver( this ); // this == BroadcastReceiver, not Activity
        }
    };
    this.registerReceiver( receiver, new IntentFilter("com.blah.blah.somemessage") );
    PendingIntent pintent = PendingIntent.getBroadcast( this, 0, new Intent("com.blah.blah.somemessage"), 0 );
    AlarmManager manager = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
    // set alarm to fire 5 sec (1000*5) from now (SystemClock.elapsedRealtime())
    manager.set( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1000*5, pintent );
}
private void runAlarm() {
    SetAlarm();
}
@Override
protected void onPostExecute(String result) {
    showMyHttpResponseSomewhere();
    runAlarm();
}
And how should I replace this bla-bla-bla? Not understood the purpose of this line
this.registerReceiver( receiver, new IntentFilter("com.blah.blah.somemessage") );