简体   繁体   中英

Images don't appear

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/Syst em.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$JSONForecastWeath erTask.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)

"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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM