Description: In this tutorial i will show you how to load remote images to your application and bind this image to an ImageView object. HttpURLConnection is used to download the image data and BitmapFactory is used to produce the bitmap which will be used as imageview resources.
The java code goes like this:
Using java Syntax Highlighting
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Random;
- import android.app.Activity;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ImageView;
- public class HTTPTest extends Activity {
- ImageView imView;
- String imageUrl="http://11.0.6.23/";
- Random r;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.main);
- r= new Random();
- Button bt3= (Button)findViewById(R.id.get_imagebt);
- bt3.setOnClickListener(getImgListener);
- imView = (ImageView)findViewById(R.id.imview);
- }
- View.OnClickListener getImgListener = new View.OnClickListener()
- {
- @Override
- public void onClick(View view) {
- // TODO Auto-generated method stub
- //i tried to randomize the file download, in my server i put 4 files with name like
- //png0.png, png1.png, png2.png so different file is downloaded in button press
- int i =r.nextInt()%4;
- downloadFile(imageUrl+"png"+i+".png");
- Log.i("im url",imageUrl+"png"+i+".png");
- }
- };
- Bitmap bmImg;
- void downloadFile(String fileUrl){
- URL myFileUrl =null;
- try {
- myFileUrl= new URL(fileUrl);
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- try {
- HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
- conn.setDoInput(true);
- conn.connect();
- int length = conn.getContentLength();
- InputStream is = conn.getInputStream();
- bmImg = BitmapFactory.decodeStream(is);
- imView.setImageBitmap(bmImg);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
Parsed in 0.039 seconds, using GeSHi 1.0.8.4
And here is the layout file (main.xml):
Using xml Syntax Highlighting
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Hello World, HTTPImage load test"
- />
- <Button id="@+id/get_imagebt"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Get an image"
- android:layout_gravity="center"
- />
- <ImageView id="@+id/imview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- />
- </LinearLayout>
Parsed in 0.003 seconds, using GeSHi 1.0.8.4
The code is pretty simple and easy, most of you might already have done this, i am a slow learner, i tried different ways first, i tried to read the whole bytes of image data, do other trial and error method. I was confused about the Bitmap tranformation technology. Then i found that there is a built in class known as BitmapFactory, it can produce bitmap directly from stream. This saved a lot of my efforts. Hope it will come useful to you.
Happy andcoding
--
SHIMUL








