图像不出现

问题描述:

我试图解码从互联网下载的图像使用异步任务。问题在于图像有时会加载,有时不会。 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):位于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) ):在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 09-29 15:53:14.590:W/System.err(14373):在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):位于libcore.ne t.http.HttpConnection.connect(HttpConnection.java:128) 09-29 15:53:14.590:W/System.err(14373):在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):在libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 09-29 15:53:14.590:W/System.err(14373):位于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):在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):在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):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 09-29 15:53:14.600:W/System.err(14373):在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573) 09-29 15:53:14.600:W/System.err(14373):在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):在libcore.io.Posix.connect(本地方法) 09-29 15:53:14.600:W /System.err(14373):位于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):在libcore.io.IoBridge.connect(IoBridge.java:112)

“拒绝连接” 意味着服务器尝试连接(这里是:localhost)以没有您尝试连接到的端口上的任何内容(这里是:81)。

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

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

+0

即时通讯在我的手机上运行,​​我该如何解决它? – GibranG

+0

使用正确的地址。例如,如果您使用的是WiFi,则由家庭路由器分配给您计算机的IP(假设服务器位于您的开发计算机上) – Joni