Saturday, February 11, 2012

Non-Blocking Web-Request through code in android?

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.

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.http.util.ByteArrayBuffer;


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