BitmapFactory.decodeStream(input) always return null - android

I have a probleme here.
I have some image url in a list
agenda.get(i).getPicture() // always return a good image url
In a Thread i do this :
for (int i = 0; i < agenda.size(); i ++)
{
Log.e("TEST", " = " +agenda.get(i).getPicture());
Bitmap newBitmap = getBitmapFromURL(agenda.get(i).getPicture()); // getPicture return the url
imagelist.add(i,newBitmap);
}
And getBitmapFromURL return null cause of :
BitmapFactory.decodeStream(input)
in :
private Bitmap getBitmapFromURL(final String src) {
Runnable r=new Runnable()
{
public void run() {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
myBitmap = BitmapFactory.decodeStream(input);
connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
};
return myBitmap;
}
Now if someone has an idea plz !
Thanks
EDIT !
It's possible that
InputStream input = connection.getInputStream();
fail too... I don't know why

Related

invalid url when downloading jpg image to android

I am getting a nullPointerException when trying to download a jpg file. It is done in an AsyncTask method and I can't trace the program flow in the debugger probably because it is
asynchronous. My trace reveals that 2 records were read before it stopped. I am using port 8000 as my local server and the url it stops on is
http://10.0.2.2:8000/my_album/5_irises.jpg".
Is there something special about downloading jpegs versus png files or is my url coded incorrectly? Is the underscore a problem in the url? Also, do I have to close the connection after each download?
begin of loop {
........
new AccessImages().execute(urlstring);
} ......end of loop
private class AccessImages extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urladds){
return downloadImage(urladds[0]);
}
protected void onPostExecute(Bitmap bm) {
bitmap_photo[itemcount] = bm;
itemcount++;
}
}
private Bitmap downloadImage(String url) {
Log.d("downloadImage", url);
Bitmap bmap = null;
InputStream inStream = null;
// Drawable drawable = null;
try {
inStream = openHttpConnection(url);
Log.d("inStream", String.valueOf(inStream));
// drawable = Drawable.createFromStream(inStream, "src");
Log.d("before bmap", url);
bmap = BitmapFactory.decodeStream(inStream);
Log.d("after bmap", url);
inStream.close();
}
catch (IOException el) {
el.printStackTrace();
}
return bmap;
}
private InputStream openHttpConnection(String urlString) throws IOException {
InputStream inStream = null;
int checkConn = -1;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
try {
Log.d("try openhttpconnection", urlString);
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
checkConn = httpConn.getResponseCode();
if (checkConn == HttpURLConnection.HTTP_OK) {
inStream = httpConn.getInputStream();
Log.d("instream", urlString);
}
}
catch (Exception ex) {
throw new IOException("Error connecting");
}
return inStream;
}
I just found out the NullPointerException was at this instruction:
inStream.close();
What would cause that?
Ok. Now I corrected for the inStream not being null but now I am getting NullPointerException from the following instruction: bitmap_photo[itemcount] = bm;
if(bm != null)
{
bitmap_photo[itemcount] = bm;
itemcount++;
}
Can't I check for a null value in a bitmap or is the array the problem? I should add that I created the bitmap_photo array as follows: Is this a problem?
Bitmap [] bitmap_photo;

Image not showing on image view

I am trying to set image on imageview but image is not show.
I am reading image url from json data and then trying to set it on ImageView but my image is not visible. No any exception occur.
Here is my code
HotelList.class
static final String TAG_DISHIMAGEURL = "dishimageurl";
......
String imageUrl = dishResult.getString(TAG_DISHIMAGEURL);
map.put(TAG_DISHIMAGEURL, imageUrl);
.....
dishimageurl1 = hm.get(TAG_DISHIMAGEURL).toString();
intent.putExtra("background", dishimageurl1);
HotelDetails.class
......
String dishimageurl = bundle.getString("background");
Bitmap bimage= getBitmapFromURL(dishimageurl);
imageView.setImageBitmap(bimage);
....
public Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
Toast.makeText(this, "showing image", Toast.LENGTH_LONG).show();
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
Toast.makeText(this, "showing exception", Toast.LENGTH_LONG).show();
return null;
}
}
I don't understand what happen with this code. No any exception but my image is not visible.
Please give me any reference.
Please Use below code for get image from url and display into imageview.
public class image extends Activity {
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bitmap bitmap = DownloadImage("http://www.gophoto.it/view.php?i=http://1.bp.blogspot.com/-2LTvCCufBKc/T3L3KgcTj2I/AAAAAAAABbQ/Ki60e1LU9sE/s1600/Sachin%2BTendulkar.png");
RelativeLayout mRlayout1 = (RelativeLayout) findViewById(R.id.mRlayout1);
Drawable d=new BitmapDrawable(bitmap);
mRlayoutLogin.setBackgroundDrawable(d);
}
private InputStream OpenHttpConnection(String urlString) throws IOException {
InputStream in = null;
int response = -1;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");
try {
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
} catch (Exception ex) {
throw new IOException("Error connecting");
}
return in;
}
private Bitmap DownloadImage(String URL) {
Bitmap bitmap = null;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
bitmap = BitmapFactory.decodeStream(in);
in.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return bitmap;
}
}
you can view image by using this code.
try {
bitmap = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
It seems you are downloading the image from UI thread. this will block the UI thread and will give you not responding error. as an easy way, you can use a library like Universal Image Loader
Universal Image Loader - GitHub
this will manage the image loading for you and avoid problems like incorrect urls, Out Of Memory error.

How can I read an image from a URL in Android?

I want to read an image from a this URL photo
and I'm using the following code
public static Bitmap DownloadImage(String URL)
{
Bitmap bitmap=null;
InputStream in=null;
try {
in=networking.OpenHttpConnection("http://izwaj.com/"+URL);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize=8;
bitmap=BitmapFactory.decodeStream(in, null, options);
in.close();
} catch (Exception e) {
// TODO: handle exception
}
return bitmap;
}
public class Networking {
public InputStream OpenHttpConnection(String urlString)
throws IOException
{
InputStream in=null;
int response = -1;
URL url=new URL(urlString);
URLConnection conn=url.openConnection();
if(!(conn instanceof HttpURLConnection))
{
throw new IOException("Not an HTTP connection");
}
try {
HttpURLConnection httpconn=(HttpURLConnection)conn;
httpconn.setAllowUserInteraction(false);
httpconn.setInstanceFollowRedirects(true);
httpconn.setRequestMethod("GET");
httpconn.connect();
response=httpconn.getResponseCode();
if(response==HttpURLConnection.HTTP_OK)
{
in=httpconn.getInputStream();
}
}
catch (Exception ex) {
throw new IOException("Error connecting");
}
return in;
}
The bitmap always returned to me null.. I used also other functions found on the internet. all returned the bitmap as null value :S
use this function it may help you.
public Bitmap convertImage(String url)
{
URL aURL = null;
try
{
final String imageUrl =url.replaceAll(" ","%20");
Log.e("Image Url",imageUrl);
aURL = new URL(imageUrl);
URLConnection conn = aURL.openConnection();
InputStream is = conn.getInputStream();
//#SuppressWarnings("unused")
BufferedInputStream bis = new BufferedInputStream(is);
Bitmap bm = BitmapFactory.decodeStream(new PatchInputStream(bis));
if(bm==null)
{}
else
Bitmap bit=Bitmap.createScaledBitmap(bm,72, 72, true);//mention size here
return bit;
}
catch (IOException e)
{
Log.e("error in bitmap",e.getMessage());
return null;
}
}
I would check the %20 spacing on the picture
http://184.173.7.132/RealAds_Images/Apartment%20for%20sale,%20Sheikh%20Zayed%20_%201.jpg
To me the %20 will not render a space so ensure this is noted in your code
if you change the file to apartmentforsalesheikhzayed20201.jpg or something like as a test apartment.jpg it will work.
Personally instead of using spaces in your image names i would use an underscore between the spaces so no other code is needed try_renaming_your_photo_to_this.jpg :)

I am not getting image from url by using this code

I am using the following code
public class Img extends Activity {
/** Called when the activity is first created. */
ImageView img;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img = (ImageView)findViewById(R.id.imgview);
Bitmap bm = getBitmapFromURL("http://l.yimg.com/a/i/us/we/52/21.gif");
if(bm == null)
Toast.makeText(this, "Image can't load", 1).show();
else
img.setImageBitmap(bm);
}
public static Bitmap getBitmapFromURL(String src) {
try {
Log.e("src",src);
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
Log.e("Bitmap","returned");
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
Log.e("Exception",e.getMessage());
return null;
}
}
}
I am getting a message "Image can't load"
Please try below code.
ImageView img;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img = (ImageView)findViewById(R.id.imgview);
Drawable image = getBitmapFromURL("http://l.yimg.com/a/i/us/we/52/21.gif");
if(image == null)
Toast.makeText(this, "Image can't load", 1).show();
else
img.setImageDrawable(image);
}
public Drawable getBitmapFromURL(String url) {
try {
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
} catch (Exception e) {
return null;
}
}
try this..
private Bitmap downloadUrl(String url) {
InputStream myInputStream =null;
Bitmap myBitmap;
StringBuilder sb = new StringBuilder();
//adding some data to send along with the request to the server
sb.append("name=Anthony");
URL url;
try {
url = new URL(url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStreamWriter wr = new OutputStreamWriter(conn
.getOutputStream());
// this is were we're adding post data to the request
wr.write(sb.toString());
wr.flush();
myInputStream = conn.getInputStream();
wr.close();
myBitmap = BitmapFactory.decodeStream(myInputStream);
} catch (Exception e) {
//handle the exception !
Log.d(TAG,e.getMessage());
}
return myBitmap;
}

Android imageview only accepts some jpg's

I have an image view in my app. when I try to make it show a jpg file exported from 3ds max, it works. But if it comes from Photoshop, it just does nothing. Why is that? If it is at all important my app gets the image from my server with the following code:
public static Bitmap getWebImage(String URL)
{
URL myImageURL = null;
Bitmap bitmap = null;
try {
myImageURL = new URL(URL);
} catch (MalformedURLException error) {
error.printStackTrace();
}
try {
HttpURLConnection connection = (HttpURLConnection)myImageURL .openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(input);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
Can you check the color settings of your JPG files? Most likely your JPG files from photoshop is in CMYK rather than RGB, and Android simply doesn't support CMYK.
Would it be possible for you to upload the two pictures for comparison?
public static Bitmap getWebImage(String URL)
{
URL myImageURL = null;
Bitmap bitmap = null;
try {
myImageURL = new URL(URL);
} catch (MalformedURLException error) {
error.printStackTrace();
}
try {
HttpURLConnection connection = (HttpURLConnection)myImageURL .openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(input);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}

Categories

Resources