2013-09-29 9 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 : System.err에/W (14373) : java.net.ConnectException : /127.0.0.1 (포트 81)에 연결하지 못했습니다 : 연결 실패 : ECONNREFUSED (연결이 거부 됨) 09-29 15 : 53 : 14.590 : System.err (14373) : libcore .io.IoBridge.connect (IoBridge.java:114) 09-29 15 : 53 : 14.590 : W/System.err (14373) : 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 : System.err (14373) : java.net.Socket.connect (Socket.java:842)) 09-29 15 : 53 : 14.590 : W/System.err (14373) : libcore.net.http.HttpConnection. (HttpConnection.java:76) 09-29 15 : 53 : 14.590 : 시스템. 오류 (14373) : libcore.net.http.HttpConnection. (HttpConnection.java:50) 09-29 15 : 53 : 14.590 : System.err (14373) : libcore.net.http.HttpConnection $ Address .connect (HttpConnection.java:340) 09-29 15 : 53 : 14.590 : W/System.err (14373) : 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) : libcore.net.http.HttpEngine.connect (HttpEngine.java:311) 09-29 15 : 53 : 14.590 : 시스템. 오류 (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) : 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) : com.example.weatherforecast.WeatherHttpClient.getImage (WeatherHttpClient.java:116) 09-29 15 : 53 : 14.590 : W/System.err (14373) : com.example.weatherforecast.MainActivity $ JSONForecastWeatherTask. doInBackground (MainActivity.java:187) 09-29 15 : 53 : 14.590 : System.err (14373) : 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) : 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 : System.err (14373) : java.lang.Thread.run (Thread.java:856) 09-29 15 : 53 : 14.600 : 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) : 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

"연결이 거부 됨"는 서버가 연결을 시도한다는 의미가 없습니다하는 (여기에 로컬 호스트를) 연결하려는 포트에서 수신하는 모든 것 (여기 : 81).

localhost라는 이름은 코드가 실행되는 기기, 즉 Android 기기 또는 에뮬레이터를 의미합니다. 동일한 장치의 포트 81에서 연결을 허용하는 응용 프로그램을 실행하고 있지 않는 한 잘못된 주소에 연결하고 있습니다.

개발 컴퓨터에서 서버를 실행하고 에뮬레이터에서 서버에 연결하려고하면 localhost 대신 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 (서버가 dev 컴퓨터에 있다고 가정) – Joni

관련 문제