0
votes

Im trying to decode images downloaded from the internet using an async task. The problem is that the images sometimes load and sometimes don't. The image on the URL is always present.

Here is my asycn task:

private class JSONIconWeatherTask extends AsyncTask<String, Void, byte[]> {

    @Override
    protected byte[] doInBackground(String... params) {

        byte[] data = null;

        try {
            // Let's retrieve the icon
            data = ( (new WeatherHttpClient()).getImage(params[0]));

        } catch (Exception e) {             
            e.printStackTrace();
        }

        return data;
}

@Override
    protected void onPostExecute(byte[] data) {         
        super.onPostExecute(data);

        if (data != null) {
            Bitmap img = BitmapFactory.decodeByteArray(data, 0, data.length);
            iconWeather.setImageBitmap(img);
        }
    }

}

And here is my log:

09-29 15:53:14.590: W/System.err(14373): java.net.ConnectException: failed to connect to /127.0.0.1 (port 81): connect failed: ECONNREFUSED (Connection refused) 09-29 15:53:14.590: W/System.err(14373): at libcore.io.IoBridge.connect(IoBridge.java:114) 09-29 15:53:14.590: W/System.err(14373): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 09-29 15:53:14.590: W/System.err(14373): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 09-29 15:53:14.590: W/System.err(14373): at java.net.Socket.connect(Socket.java:842) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpConnection.(HttpConnection.java:76) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpConnection.(HttpConnection.java:50) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282) 09-29 15:53:14.590: W/System.err(14373): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 09-29 15:53:14.590: W/System.err(14373): at com.example.weatherforecast.WeatherHttpClient.getImage(WeatherHttpClient.java:116) 09-29 15:53:14.590: W/System.err(14373): at com.example.weatherforecast.MainActivity$JSONForecastWeatherTask.doInBackground(MainActivity.java:187) 09-29 15:53:14.590: W/System.err(14373): at com.example.weatherforecast.MainActivity$JSONForecastWeatherTask.doInBackground(MainActivity.java:1) 09-29 15:53:14.590: W/System.err(14373): at android.os.AsyncTask$2.call(AsyncTask.java:287) 09-29 15:53:14.590: W/System.err(14373): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 09-29 15:53:14.590: W/System.err(14373): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 09-29 15:53:14.590: W/System.err(14373): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 09-29 15:53:14.600: W/System.err(14373): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 09-29 15:53:14.600: W/System.err(14373): at java.lang.Thread.run(Thread.java:856) 09-29 15:53:14.600: W/System.err(14373): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused) 09-29 15:53:14.600: W/System.err(14373): at libcore.io.Posix.connect(Native Method) 09-29 15:53:14.600: W/System.err(14373): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 09-29 15:53:14.600: W/System.err(14373): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 09-29 15:53:14.600: W/System.err(14373): at libcore.io.IoBridge.connect(IoBridge.java:112)

1

1 Answers

0
votes

"Connection refused" means that the server you try to connect (here: localhost) to doesn't have anything listening on the port you try to connect to (here: 81).

The name localhost refers to the device the code runs on, that is the android device or emulator. Unless you are also running an application that accepts connections on port 81 on the same device, you are connecting to the wrong address.

If you are running a server on your development machine and try to connect there from the emulator you should use 10.0.2.2 instead of localhost. See why do we use 10.0.2.2 to connect to local web server instead of using computer ip address in android client