Friday, February 10, 2012

How to download something in the background in an Android application?

This code fetches content from the web without blocking the UI (runs in the background in a Thread). Once finished, it posts a Handler that is picked up by the UI as soon as possible.


public class Iconic extends Activity {
  private String html = "";
  private Handler mHandler;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
   mHandler = new Handler();
   checkUpdate.start();
  }

  private Thread checkUpdate = new Thread() {
    public void run() {
      try {
        URL updateURL = new URL("http://iconic.4feets.com/update");
        URLConnection conn = updateURL.openConnection();
        InputStream is = conn.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        ByteArrayBuffer baf = new ByteArrayBuffer(50);

        int current = 0;
        while((current = bis.read()) != -1){
          baf.append((byte)current);
        }

        /* Convert the Bytes read to a String. */
        html = new String(baf.toByteArray());
        mHandler.post(showUpdate);
      } catch (Exception e) {
      }
    }
  };

  private Runnable showUpdate = new Runnable(){
    public void run(){
     Toast.makeText(Iconic.this, "HTML Code: " + html, 
     Toast.LENGTH_SHORT).show();
    }
  };
}

No comments:

Post a Comment