2014-11-04 7 views
0

백그라운드에서 수행 할 탐색 창과 일부 비동기 작업이 있습니다. 내가하려는 것은 특정 항목이 탐색 창에서 선택되었을 때 비동기 작업에서 백그라운드로 수행되는 방법을 실행하는 것입니다. 나는 항목이 선택 된에 의존하지 않는 경우에서 onCreate 있도록이 비동기 작업 클래스라고Android 비동기 작업 NetworkOnMainThreadException

private class MyAsyncTask extends AsyncTask<Void, Integer, Double> { 
    @Override 
    protected Double doInBackground(Void... params) { 
     try { 
      ViewEventsOnMap(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onPostExecute(Double result) { 
    } 

    protected void onProgressUpdate(Integer... progress) { 
    } 
} 

:

private void selectItem(int position) { 
    selectedPosition = position; 
    mDrawerLayout.closeDrawer(navDrawerView); 

    switch (selectedPosition) { 
    case 0: 
     try { 
      ViewEventsOnMap(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     Toast.makeText(ENeighbourhoodActivity.this, "Press and hold at the area where you wish to create an event!", 
       Toast.LENGTH_LONG).show(); 
     break; 
    case 1: 
     Toast.makeText(ENeighbourhoodActivity.this, "Analyze Event", 
       Toast.LENGTH_LONG).show(); 
     break; 
    } 

    setTitle(mEventSelection[selectedPosition]); 

} 

그리고 내 비동기 작업 클래스 : 여기에 뭔가 탐색 창에서 선택한 코드입니다 탐색 창에서.

11-04 20:54:45.642: W/dalvikvm(25527): threadid=1: thread exiting with uncaught exception (group=0x40c3f1f8) 
11-04 20:54:45.673: E/AndroidRuntime(25527): FATAL EXCEPTION: main 
11-04 20:54:45.673: E/AndroidRuntime(25527): android.os.NetworkOnMainThreadException 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at libcore.io.IoBridge.connect(IoBridge.java:112) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at java.net.Socket.connect(Socket.java:842) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at nyp.edu.eneighbourhood.ENeighbourhoodActivity.ViewEventsOnMap(ENeighbourhoodActivity.java:204) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at nyp.edu.eneighbourhood.ENeighbourhoodActivity.selectItem(ENeighbourhoodActivity.java:385) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at nyp.edu.eneighbourhood.ENeighbourhoodActivity.access$4(ENeighbourhoodActivity.java:378) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at nyp.edu.eneighbourhood.ENeighbourhoodActivity$5.onChildClick(ENeighbourhoodActivity.java:341) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:584) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:521) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2713) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.widget.AbsListView$1.run(AbsListView.java:3468) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.os.Handler.handleCallback(Handler.java:605) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.os.Looper.loop(Looper.java:137) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at android.app.ActivityThread.main(ActivityThread.java:4512) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at java.lang.reflect.Method.invokeNative(Native Method) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at java.lang.reflect.Method.invoke(Method.java:511) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 
11-04 20:54:45.673: E/AndroidRuntime(25527): at dalvik.system.NativeStart.main(Native Method) 

모든 가이드 :

public void ViewEventsOnMap() throws JSONException { 
    String page; 
    JSONArray jsonArray; 

    try { 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(URL); 
     HttpResponse response = client.execute(request); 
     HttpEntity entity = response.getEntity(); 
     try { 
      // Codes to retrieve data from servlet and plot marker onto the map 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

그러나 이러한 코드와

, 나는 이러한 오류 메시지는 무엇입니까? 미리 감사드립니다.

답변

3

당신은 AsyncTask 클래스를 작성 했으므로 사용하지 않았습니다. 스택 추적에서 기본 응용 프로그램 스레드의 selectItem()에서 ViewEventsOnMap()으로 전화를 걸 었으며 어디서나 MyAsyncTask을 사용하고 있지 않음을 나타냅니다.

+0

배경에서 어떻게해야 viewEventsOnMap() 내가 비동기 작업 클래스를 호출 한 전화를해야 일을

. 따라서 내지도가로드되면 내비게이션 서랍에서 선택하지 않고 바로 모든 마커를 표시합니다. –

+0

@IWasSoLost : "viewEventsOnMap()은 백그라운드에서 수행해야합니다."- 작성한 코드에 따르지 않습니다. "비동기 작업 클래스를 생성 할 때 호출했습니다."- 당신이'NetworkOnMainThreadException'이 나오는 selectItem()에서 호출하지 않기 때문에 중요하지 않습니다. – CommonsWare

+0

예상 한대로 작동하도록 코드를 왜곡 할 수있는 아이디어가 있습니까? –

1

네트워크 통화에 AsyncTask을 사용하고 있지 않습니다. AsyncTask을 작성했지만 정확히 사용하지는 않았습니다.

탐색함에있는 항목을 선택하면 UI 스레드에서 실행되는 ViewEventsOnMap() 메서드를 직접 호출합니다. 대신 당신이 경우에 만들려면 AsycnTask

+0

백그라운드에서 수행해야하는 viewEventsOnMap()과 내가 만들 때 비동기 작업 클래스를 호출했습니다. 따라서 내지도가로드되면 내비게이션 서랍에서 선택하지 않고 바로 모든 마커를 표시합니다. –

+0

메쏘드 ViewEventsOnMap()은 네트워크 호출을하고 있으며 선택없이 AsyncTask 내부에 있어야합니다. 해결 방법을 찾으십시오. – Rohit5k2

+0

하지만 아이디어가 있습니까? –