마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

client.execute 계속 에러가 나네요 ㅠㅠ

0 추천

 

// get product data from server
 
        HttpPost request = new HttpPost( imageurl ) ;  
        Log.d("tag02","request");
        HttpClient client = new DefaultHttpClient() ;
        HttpResponse response;
        Log.d("tag02","HttpResponse");
       
try {
response = (HttpResponse) client.execute(request);
Log.d("tag02","response");
HttpEntity entity = response.getEntity(); 
 
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity); 
 
InputStream is2 = response.getEntity().getContent();
        Bitmap bit = BitmapFactory.decodeStream(is2);        
        Profile.setImageBitmap(bit);        
        is2.close(); 
 
} catch (ClientProtocolException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}      
 
 
 
 
그냥 단순히 이미지 파일 받아오는 코드를 만들었는데요 ㅠ
 
client.execute 이부분에서
에러가 계속떠서 질문드려요 ㅠ
 
 
 
인터넷 퍼미션같은거 했구요 ㅠㅠ
 
아래는 에러코드에요
 
07-06 06:05:58.744: E/AndroidRuntime(16835): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:251)
07-06 06:05:58.744: E/AndroidRuntime(16835): at java.net.InetAddress.getAllByName(InetAddress.java:229)
07-06 06:05:58.744: E/AndroidRuntime(16835): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
07-06 06:05:58.744: E/AndroidRuntime(16835): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
07-06 06:05:58.744: E/AndroidRuntime(16835): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
07-06 06:05:58.744: E/AndroidRuntime(16835): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
07-06 06:05:58.744: E/AndroidRuntime(16835): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
07-06 06:05:58.744: E/AndroidRuntime(16835): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
07-06 06:05:58.744: E/AndroidRuntime(16835): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
07-06 06:05:58.744: E/AndroidRuntime(16835): at com.exam.coinBlockIntroActivity.onCreate(coinBlockIntroActivity.java:173)
07-06 06:05:58.744: E/AndroidRuntime(16835): at android.app.Activity.performCreate(Activity.java:5275)
07-06 06:05:58.744: E/AndroidRuntime(16835): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-06 06:05:58.744: E/AndroidRuntime(16835): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
07-06 06:05:58.744: E/AndroidRuntime(16835): ... 11 more

 

bombermin (2,520 포인트) 님이 2014년 7월 6일 질문
무슨 Exception인지도 출력이 안되고 .. 뭔가 에러 메세지가 짤려있는 듯하네요. 제가보기에는
에러 전문이에요!!ㅠ


07-06 12:45:23.448: W/dalvikvm(20630): threadid=1: thread exiting with uncaught exception (group=0x41923e48)
07-06 12:45:23.468: E/AndroidRuntime(20630): FATAL EXCEPTION: main

07-06 12:45:23.468: E/AndroidRuntime(20630): Process: com.exam, PID: 20630
07-06 12:45:23.468: E/AndroidRuntime(20630): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.exam/com.exam.coinBlockIntroActivity}: android.os.NetworkOnMainThreadException
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2262)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.app.ActivityThread.access$800(ActivityThread.java:139)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.os.Looper.loop(Looper.java:136)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.app.ActivityThread.main(ActivityThread.java:5129)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at java.lang.reflect.Method.invokeNative(Native Method)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at java.lang.reflect.Method.invoke(Method.java:515)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at dalvik.system.NativeStart.main(Native Method)
07-06 12:45:23.468: E/AndroidRuntime(20630): Caused by: android.os.NetworkOnMainThreadException
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1148)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:251)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at java.net.InetAddress.getAllByName(InetAddress.java:229)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at com.exam.coinBlockIntroActivity.onCreate(coinBlockIntroActivity.java:173)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.app.Activity.performCreate(Activity.java:5275)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-06 12:45:23.468: E/AndroidRuntime(20630):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
07-06 12:45:23.468: E/AndroidRuntime(20630):     ... 11 more
자 ... 이제 핵심적인 오류메세지를 보면
NetworkOnMainThreadException 입니다.
네트워크 작업을 메인 스레드에서 처리했기때문에 Exception을 발생한다.

즉, 다른 스레드에서 작업해라. 이 말입니다.
안드로이드에서는 대부분 AsyncTask 클래스로 처리하고 있습니다.
http://ismydream.tistory.com/130

혹, 직접 스레드를 상속받아 구현하셔도 됩니다.

아니면.. 굳이 그냥 메인스레드에서 작업을 하겠다 하시면
아래 링크를 참조해주세요.
http://gochul.tistory.com/3

요약.
1. 추천하지 않는 방법 : http://gochul.tistory.com/3 ( 메인스레드에서도 네트워크 작업을 가능하게 하는 방법 )
2. 보편적인 방법 :  AsyncTask
3. 최적화할 수 있는 방법 : Thread


출력되는 Exception은 무엇인가 감이오는 단어들을 캐치하시면 편합니다. : )

1개의 답변

0 추천
북극 토끼님이 아주 상세히 잘 설명해주셨네요.  저역시 1번방법은 추천하지 않습니다.

조금 설명을 덧붙히자면 저기서 말하는 main스레드란 안드로이드에서 흔히 ui스레드라고 불리우며 화면단을 컨츄롤 하는데 사용되어 집니다. 그 외 외, 내부 통신을 하거나 별도의 디코딩등은 말그대로 별도의 스레드 혹은 AsyncTask의 doInbackground 라는 오버라이드 메소드내에서 주로 이루어지게 됩니다.

전 개인적으로 어싱크타스크를 추천 드려요.
쭈쭈총각 (17,750 포인트) 님이 2014년 7월 30일 답변
...