Reputation: 145
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
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
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
Reputation: 2711
make a Get request with that id number to the webservice and the service responds with the required image.
Upvotes: 1