2014-04-18 4 views
-2

URL에서 이미지를 삽입하는 데 문제가 있습니다. I는 BitmapFactory로부터 스트림을 디코딩 할 때, 애플리케이션은BitmapFactory 및 HTTPUrlConnection 문제

온 클릭 방법

@Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Bundle extras = getIntent().getExtras(); 
       String temp = (String) extras.get("temp"); 

       String ikona = (String) extras.get("ikony"); 
       URLs = "http://openweathermap.org/img/w/"+ikona+".png"; 
       Log.d("asd",URLs); 

       try { 
        URL url = new URL(URLs); 
        Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); // here is the problem 
        imageView1.setImageBitmap(bmp); 
       } catch (MalformedURLException e) { 
        Log.d("asd","malformedURLException"); 
        e.printStackTrace(); 
       } catch (IOException e) { 
        Log.d("asd","IOException"); 
        e.printStackTrace(); 
       } 



      } 
     }); 

문제점 맵 BMP = BitmapFactory.decodeStream에 충돌 (url.openConnection().는 getInputStream())

04-18 21:38:55.049: E/AndroidRuntime(26374): FATAL EXCEPTION: main 
04-18 21:38:55.049: E/AndroidRuntime(26374): android.os.NetworkOnMainThreadException 
04-18 21:38:55.049: E/AndroidRuntime(26374): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at pl.pawelfrydrych.realweather.Szczegoly$1.onClick(Szczegoly.java:55) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at android.view.View.performClick(View.java:4475) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at android.view.View$PerformClick.run(View.java:18786) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at android.os.Handler.handleCallback(Handler.java:730) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at android.os.Looper.loop(Looper.java:137) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at android.app.ActivityThread.main(ActivityThread.java:5419) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at java.lang.reflect.Method.invokeNative(Native Method) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at java.lang.reflect.Method.invoke(Method.java:525) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
04-18 21:38:55.049: E/AndroidRuntime(26374): at dalvik.system.NativeStart.main(Native Method) 
+1

문제에 대해 자세히 알려주십시오. –

답변

1

url에서 비트 맵 이미지를 직접 스레드에서 실행할 수 없습니다.

Bundle extras = getIntent().getExtras(); 
String temp = (String) extras.get("temp"); 

String ikona = (String) extras.get("ikony"); 
URLs = "http://openweathermap.org/img/w/"+ikona+".png"; 
Log.d("asd",URLs); 

Thread thread = new Thread(new Runnable() { 

    public void run() { 
     try { 
      URL url = new URL(URLs); 
      Bitmap bmp= BitmapFactory.decodeStream((InputStream) new URL(url).getContent()); 
      imageView1.setImageBitmap(bmp); 
     } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}); 
thread.start(); 
1

메인 스레드에서 네트워크 호출을 할 수 없습니다. 별도의 스레드 또는 AsyncTask에서 비트 맵 디코딩을 수행합니다. 또한 인터넷 사용 허가를 받았는지 확인하십시오.