user1389233
user1389233

Reputation: 145

How to get image from web service to android application?

I am trying to load images from a server, according to their id number. Which would be the best method to retrive it from the webservice?

package com.crispsys;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class imageviewer extends Activity {
    /** Called when the activity is first created. */
    
    Bitmap image; 
    private TextView ordernumber;
     ImageView imageView;
     private Button butt;
     String Str="image",ordno;
     
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.imageviewerr);
        
         this.butt = (Button) this.findViewById(R.id.getbutt);
          this.imageView =(ImageView) findViewById(R.id.blodig);
          this.ordernumber=(TextView)this.findViewById(R.id.ordernotext);
          
          final Bundle getdata = getIntent().getExtras();
          
          if (getdata != null)    
          {
              ordno=getdata.getString("orono");
              ordernumber.setText(ordno);
          }
         
        
        this.butt.setOnClickListener(new View.OnClickListener() {
            
            public void onClick(View v) {
                // TODO Auto-generated method stub
                
                
                Toast.makeText(getApplicationContext(),"loading" , Toast.LENGTH_LONG).show();
                
                      URL url = null;
                
                
                      try 
                      {
                        
                          url = new URL("http://www.cyberstudents.in/aaa/car.jpg");
                          
                      }
                      catch (MalformedURLException e) 
                      {
                          e.printStackTrace();
                      }
                      try {
                          image = BitmapFactory.decodeStream(url.openStream());
                         
                      } 
                      catch (IOException e) 
                      {
                          e.printStackTrace();
                      }
                
                imageView.setImageBitmap(image);
            }
        });
       
    }
}

XML File:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@drawable/cr_isp"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="match_parent"
        android:gravity="center"
        android:paddingTop="20dp"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/ordernotext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#8B8682"
            android:text="" />

       
    </TableRow> 
    
    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="match_parent"
        android:gravity="center"
        android:paddingTop="20dp"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/getbutt"
            android:layout_width="210dp"
            android:layout_height="40dp"
            android:background="@drawable/bcbut"
            android:textColor="#8B8682"
            android:text="Get Block Dig" />
        
    </TableRow>

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="match_parent"
        android:gravity="center"
        android:paddingTop="20dp"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/blodig"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />

    </TableRow>

</LinearLayout>

Tried with this code, but I could only work with small sized images. When I go for a big sized image, it doesn't work. It remains the same, I can't find any error. It is showing the same screen.

Upvotes: 4

Views: 15251

Answers (3)

Chrishan
Chrishan

Reputation: 4106

You can use Asynchronous Image loader to load images asynchronously. Check the below code.

private class FetchImageTask extends AsyncTask<String, Integer, Bitmap> {
    @Override
    protected Bitmap doInBackground(String... arg0) {
        Bitmap b = null;
        try {
            b = BitmapFactory.decodeStream((InputStream) new URL(arg0[0]).getContent());
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return b;
    }
}

To implement use this code.

new FetchImageTask() {
        @Override
        protected void onPostExecute(Bitmap result) {
            if (result != null) {
                image.setImageBitmap(result);
            }
        }
    }.execute("IMAGE_URL");

Upvotes: 11

Karan_Rana
Karan_Rana

Reputation: 2823

It depends upon the response from the server,i.e in which form it is providing the image . It can be in form of base 64 string or a URL.

If it is a base 64 string then you to encode it back using base64 class in java and if its url then you simply need to set image using bitmap by convrting image to bitmap from url. You need to make a get request to server using httpGet in following manner.

public static String connect(String url) throws IOException {
    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(url);
    HttpResponse response;
    try {
        response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instream = entity.getContent();
            result = convertStreamToString(instream);
            instream.close();
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return result;
}


private static String convertStreamToString(InputStream input) {
    /*
     * To convert the InputStream to String we use the
     * BufferedReader.readLine() method. We iterate until the BufferedReader
     * return null which means there's no more data to read. Each line will
     * appended to a StringBuilder and returned as String.
     */
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    StringBuilder buffer = new StringBuilder();
    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            buffer.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return buffer.toString();
}

Upvotes: 2

Prakash Nadar
Prakash Nadar

Reputation: 2711

make a Get request with that id number to the webservice and the service responds with the required image.

Upvotes: 1

Related Questions