2014-05-14 2 views
-1

내 앱의 일부는 웹 페이지로 이동하여 텍스트를 구문 분석하여 오늘의 성경 절을 얻는 것을 포함합니다. 메인 애플리케이션의 경우 코드를 ASyncTask에 넣었지만 잘 작동하지만 브로드 캐스트 리시버에서 똑같은 작업을 수행 할 수 있도록 문제를 겪고 있습니다. doInBackground() 메서드에서 코드를 복사하고 다음 메서드를 설정했습니다. 내가 한 유일한 변화는 수집 된 데이터를 임시 변수에 저장하는 대신 onPostExecute() 메서드에서 처리하도록 수집 된 데이터를 직접 저장하는 것이 었습니다.웹 페이지를 읽는 중 오류가 발생했습니다.

문제는이 메서드는 줄을 읽으려고하자마자 예외를 throw합니다. 예외 메시지가 없지만 다음 스택 추적을 얻을 :

05-14 13:54:19.288: W/System.err(23789): android.os.NetworkOnMainThreadException 
0 

5-14 13:54:19.288: W/System.err(23789):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
05-14 13:54:19.298: W/System.err(23789): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
05-14 13:54:19.298: W/System.err(23789): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
05-14 13:54:19.298: W/System.err(23789): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
05-14 13:54:19.298: W/System.err(23789): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
05-14 13:54:19.298: W/System.err(23789): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
05-14 13:54:19.298: W/System.err(23789): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
05-14 13:54:19.298: W/System.err(23789): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
05-14 13:54:19.298: W/System.err(23789): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
05-14 13:54:19.298: W/System.err(23789): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
05-14 13:54:19.298: W/System.err(23789): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
05-14 13:54:19.298: W/System.err(23789): at com.caseybrooks.scripturememory.views.VOTDCard.getVOTD(VOTDCard.java:85) 
05-14 13:54:19.298: W/System.err(23789): at com.caseybrooks.scripturememory.views.VOTDCard.initialize(VOTDCard.java:74) 
05-14 13:54:19.298: W/System.err(23789): at com.caseybrooks.scripturememory.views.VOTDCard.<init>(VOTDCard.java:50) 
05-14 13:54:19.298: W/System.err(23789): at com.caseybrooks.scripturememory.fragments.DashboardFragment.initialize(DashboardFragment.java:76) 
05-14 13:54:19.298: W/System.err(23789): at com.caseybrooks.scripturememory.fragments.DashboardFragment.onCreateView(DashboardFragment.java:50) 
05-14 13:54:19.298: W/System.err(23789): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 
05-14 13:54:19.298: W/System.err(23789): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
05-14 13:54:19.298: W/System.err(23789): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
05-14 13:54:19.298: W/System.err(23789): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
05-14 13:54:19.298: W/System.err(23789): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 
05-14 13:54:19.298: W/System.err(23789): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570) 
05-14 13:54:19.298: W/System.err(23789): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1164) 
05-14 13:54:19.298: W/System.err(23789): at android.app.Activity.performStart(Activity.java:5114) 
05-14 13:54:19.298: W/System.err(23789): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2271) 
05-14 13:54:19.298: W/System.err(23789): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 
05-14 13:54:19.298: W/System.err(23789): at android.app.ActivityThread.access$600(ActivityThread.java:153) 
05-14 13:54:19.298: W/System.err(23789): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 
05-14 13:54:19.298: W/System.err(23789): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-14 13:54:19.298: W/System.err(23789): at android.os.Looper.loop(Looper.java:137) 
05-14 13:54:19.298: W/System.err(23789): at android.app.ActivityThread.main(ActivityThread.java:5227) 
05-14 13:54:19.298: W/System.err(23789): at java.lang.reflect.Method.invokeNative(Native Method) 
05-14 13:54:19.298: W/System.err(23789): at java.lang.reflect.Method.invoke(Method.java:511) 
05-14 13:54:19.298: W/System.err(23789): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
05-14 13:54:19.298: W/System.err(23789): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
05-14 13:54:19.298: W/System.err(23789): at dalvik.system.NativeStart.main(Native Method) 
05-14 13:54:19.368: D/libEGL(23789): loaded /system/lib/egl/libEGL_adreno200.so 
05-14 13:54:19.368: D/libEGL(23789): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 
05-14 13:54:19.368: D/libEGL(23789): loaded /system/lib/egl/libGLESv2_adreno200.so 
05-14 13:54:19.378: I/Adreno200-EGL(23789): <qeglDrvAPI_eglInitialize:269>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_JB_VANILLA.04.02.02.60.051_msm8960_JB_VANILLA_CL2997615_release_AU (CL2997615) 
05-14 13:54:19.378: I/Adreno200-EGL(23789): Build Date: 04/11/13 Thu 
05-14 13:54:19.378: I/Adreno200-EGL(23789): Local Branch: 
05-14 13:54:19.378: I/Adreno200-EGL(23789): Remote Branch: quic/mako_jb_mr1 
05-14 13:54:19.378: I/Adreno200-EGL(23789): Local Patches: NONE 
05-14 13:54:19.378: I/Adreno200-EGL(23789): Reconstruct Branch: AU_LINUX_ANDROID_JB_VANILLA.04.02.02.60.051 + NOTHING 
05-14 13:54:19.398: E/(23789): <s3dReadConfigFile:75>: Can't open file for reading 
05-14 13:54:19.398: E/(23789): <s3dReadConfigFile:75>: Can't open file for reading 
05-14 13:54:19.398: E/(23789): <s3dReadConfigFile:75>: Can't open file for reading 
05-14 
13:54:19.398: D/OpenGLRenderer(23789): Enabling debug mode 0 

여기서 내가 뭘 잘못하고 있니?

답변

2

문제는 주 스레드에서 네트워킹을 시도하고 있다는 것입니다.

NetworkOnMainThreadException

응용 프로그램의 시도가 주 스레드에서 네트워킹 작업을 수행 할 때 throw되는 예외입니다 : 그것은 당신이 예외를 가지고 이유입니다.

==> 첫 번째 아이디어에 충실하고 AsyncTask에서 계속하여 앱의 반응을 유지하십시오. 이 see this guide here, 브로드 캐스트 리시버에 대해서도 계산 : 이러한 설정을 저장하거나 노 티피 케이션을 등록하는 등의 백그라운드에서의 작고 분리 된 양의 작업 :

브로드 캐스트 리시버 실행 시간에 대한 명확한 제약은 수신기가해야 할 의미 방송 것을 강조한다. 따라서 UI 스레드에서 호출되는 다른 메서드와 마찬가지로 응용 프로그램은 브로드 캐스트 수신기에서 장시간 실행되는 연산이나 계산을 피할 수 있어야합니다.

+1

그건 의미가 있으며, 지금은 효과가 있습니다. 고맙습니다! – cjbrooks12

관련 문제