2013-09-29 48 views
0

我試圖解碼從互聯網下載的圖像使用異步任務。問題在於圖像有時會加載,有時不會。 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)

回答

0

「拒絕連接」 意味着服務器嘗試連接(這裏是: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