2012-11-03 7 views
0

xml 구문 분석을 통해 응용 프로그램에 버전 확인을 추가했습니다.xml 파일을 구문 분석하는 중 오류가 발생했습니다. Android

하지만 그것을 실행하려고 할 때, 내가 거기 붙여 넣은 예외로 실행 :

11-03 19:21:36.809: E/AndroidRuntime(16531): FATAL EXCEPTION: main 
11-03 19:21:36.809: E/AndroidRuntime(16531): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.lookedpath.firstlesson/com.lookedpath.firstlesson.Update}: android.os.NetworkOnMainThreadException 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2099) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2210) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.app.ActivityThread.access$600(ActivityThread.java:142) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.os.Looper.loop(Looper.java:137) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.app.ActivityThread.main(ActivityThread.java:4931) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at java.lang.reflect.Method.invokeNative(Native Method) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at java.lang.reflect.Method.invoke(Method.java:511) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at dalvik.system.NativeStart.main(Native Method) 
11-03 19:21:36.809: E/AndroidRuntime(16531): Caused by: android.os.NetworkOnMainThreadException 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at com.lookedpath.firstlesson.XMLParser.getXmlFromUrl(XMLParser.java:35) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at com.lookedpath.firstlesson.Update.<init>(Update.java:24) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at java.lang.Class.newInstanceImpl(Native Method) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at java.lang.Class.newInstance(Class.java:1319) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.app.Instrumentation.newActivity(Instrumentation.java:1053) 
11-03 19:21:36.809: E/AndroidRuntime(16531): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2090) 
11-03 19:21:36.809: E/AndroidRuntime(16531): ... 11 more 

사용하여 Eclipse 프로젝트를 얻을 수 있습니다 GitHub의 : https://github.com/LookedPath/lookedpath_android_applications/tree/FirstApp/PrimaLezione

무엇을해야 나는한다?

+0

[NetworkOnMainThreadException] (http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html)의 설명서를 참조하십시오. –

+1

코드의 ** 관련 ** 부분을 표시하십시오. 그냥 코드 저장소에 연결하는 것만으로는 충분하지 않습니다 ... – home

답변

0

당신은 NetworkOnMainThreadException이되어 가고 있습니다. 즉, 메인 (UI) 스레드에서 어떤 방식으로 (예를 들어 이미지 다운로드) 네트워크에 액세스하려고 시도하고 있음을 의미합니다. 이것은 API 11의 사용자 인터페이스에 대한 응답 성을 높이기 위해 비활성화되었습니다. 네트워킹에 다른 스레드를 사용해야 할 때 가장 쉬운 방법은 AsyncTask입니다. 잠시 동안 (라이브 커뮤니케이션과 같은) 연결을 유지해야하는 경우 Thread 또는 HandlerThread까지 확장하고 UI 스레드와의 통신을 직접 관리 할 수있는 새 클래스를 만들 수 있습니다 (Handler). UI가 스레드로부터 안전하지 않은 것을 잊지 마십시오.

+0

Update.java를 다음과 같이 변경했습니다. http://pastebin.com/LUQp64us 하지만 이상한 오류가 있습니다. "xx 프레임을 건너 뛰었습니다! 응용 프로그램도 수행 중일 수 있습니다. 많은 응용 프로그램이 CPU에 대한 많은로드를 생성하는 경우처럼 "주 스레드에서 많은 작업을 수행합니다. – LookedPath

+0

Connect()를 메인 프레임 대신 클래스의 AsyncTask에 넣고 이것이 도움이되는지 봅니다. – Techwolf

+0

오류가 사라졌지 만 응용 프로그램은 텍스트 뷰를 업데이트하는 대신 빈 레이아웃을 엽니 다. – LookedPath

3

가장 좋은 방법은 AsyncTask를 사용하는 것입니다.

http://developer.android.com/reference/android/os/AsyncTask.html

비동기 작업은 U fiish 다운로드, 스레드 (또는 실행 가능한)를 사용하면 UI와 상호 작용하지 않는 경우 u는 UI와 상호 작용할 수 있습니다.

UI를 변경해야하는 경우 처리기를 만들고 해당 처리기에서 변경 사항을 실행해야하지만 AsyncTask가 처리기를 구현해야합니다.

관련 문제