图像不会出现

时间:2013-09-29 11:04:26

标签: java android bitmap android-asynctask

我尝试使用异步任务解码从互联网下载的图像。问题是图像有时会加载,有时则不加载。 URL上的图像始终存在。

这是我的asycn任务:

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);
        }
    }

}

这是我的日志:

  

09-29 15:53:14.590:W / System.err(14373):java.net.ConnectException:无法连接到/127.0.0.1(端口81):连接失败:ECONNREFUSED(连接被拒绝)   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):在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):在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):引起:libcore.io.ErrnoException:连接失败:ECONNREFUSED(拒绝连接)   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 个答案:

答案 0 :(得分:0)

“拒绝连接”表示您尝试连接的服务器(此处为:localhost)没有任何内容在您尝试连接的端口上侦听(此处:81)。

名称localhost是指代码运行的设备,即android设备或模拟器。除非您还在同一设备上运行接受端口81上的连接的应用程序,否则您将连接到错误的地址。

如果您在开发计算机上运行服务器并尝试从模拟器连接,则应使用10.0.2.2而不是localhost。见why do we use 10.0.2.2 to connect to local web server instead of using computer ip address in android client