1

I have below code to download image from URL. But getting UnknowHostException:

  class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];

        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

I am calling this code like this

new DownloadImageTask((ImageView) findViewById(R.id.imageView2))
            .execute(ocrResult.getImgUrl());

ocrResult.getImgUrl has value as below:

http://thumbs1.ebaystatic.com/m/mwXFFYQ1tmdoRBaDVQG2tsA/140.jpg

I do have below permision in Android Manifest:

  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

Below is entire stack. Its seems to me that URL is getting encoded incorrectly. I see %5c and then "/" after it.

11 17:34:19.109: E/Error(2815): http:%5C/%5C/thumbs4.ebaystatic.com%5C/m%5C/mdfwIytXczq_z11DEJ42J9g%5C/140.jpg
06-11 17:34:19.117: W/System.err(2815): java.net.UnknownHostException: http:%5C/%5C/thumbs4.ebaystatic.com%5C/m%5C/mdfwIytXczq_z11DEJ42J9g%5C/140.jpg
06-11 17:34:19.125: W/System.err(2815):     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:279)
06-11 17:34:19.132: W/System.err(2815):     at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
06-11 17:34:19.132: W/System.err(2815):     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
06-11 17:34:19.132: W/System.err(2815):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
06-11 17:34:19.140: W/System.err(2815):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
06-11 17:34:19.140: W/System.err(2815):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
06-11 17:34:19.187: D/dalvikvm(2815): GC_FOR_ALLOC freed 1370K, 29% free 6738K/9360K, paused 39ms, total 39ms
06-11 17:34:19.195: W/System.err(2815):     at java.net.URL.openStream(URL.java:470)
06-11 17:34:19.203: W/System.err(2815):     at edu.sfsu.cs.orange.ocr.CaptureActivity$DownloadImageTask.doInBackground(CaptureActivity.java:854)
06-11 17:34:19.203: W/System.err(2815):     at edu.sfsu.cs.orange.ocr.CaptureActivity$DownloadImageTask.doInBackground(CaptureActivity.java:1)
06-11 17:34:19.210: W/System.err(2815):     at android.os.AsyncTask$2.call(AsyncTask.java:300)
06-11 17:34:19.218: W/System.err(2815):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-11 17:34:19.218: W/System.err(2815):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:240)
06-11 17:34:19.226: W/System.err(2815):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-11 17:34:19.226: W/System.err(2815):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-11 17:34:19.226: W/System.err(2815):     at java.lang.Thread.run(Thread.java:841)
1
  • added entire error stack Commented Jun 12, 2014 at 0:55

2 Answers 2

1

%5c is a url encoded backslash. Looks like your string's forward slashes are being escaped with backslashes like so:

http:\/\/thumbs1.ebaystatic.com\/m\/mwXFFYQ1tmdoRBaDVQG2tsA\/140.jpg

and later when you pass in this URL, all the backslashes are converted to %5c.

Make sure your string doesn't have its forward slashes escaped before passing it into DownloadImageTask. The proper way to do this is

url = url.replaceAll("\\", "");
Sign up to request clarification or add additional context in comments.

Comments

0

You are getting a wrong URL(which is character encoded URL) from your execute parameter but you can still get the correct URL using the replaceAll method of the String by replace all instances of %5C with empty character.

solution:

String urldisplay = urls[0].replaceAll("%5C","");

result:

http://thumbs4.ebaystatic.com/m/mdfwIytXczq_z11DEJ42J9g/140.jpg

1 Comment

@Amit always check logcat.. :))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.