2013-10-04 3 views
0

DoInBackground가 잘 작동하지만 locals var는 문제없이로드되지만 doinBackground가 Local []에서 RunTimeException을 반환하면 알 수 없습니다.SupportMapFragment 내의 AsyncTask 오류

다음은 내 SupportMapFragment 클래스 구현 및 예외를 보여줍니다.

public class LocalMapFragment extends SupportMapFragment { 

    private Local[] locals; 
    private MapDrawer mapDrawer; 

    public LocalMapFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.fragment_map_local, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle state) { 
     super.onActivityCreated(state); 

     new MapLocals(this).execute(); 
    } 

    public void initMap(Local[] locals) { 

     this.mapDrawer = new MapDrawer(this.getMap()); 

     this.locals = locals; 

     this.mapDrawer.showLocals(this.locals); 
    } 

    static class MapLocals extends AsyncTask<String, Integer, Local[]> { 

     LocalMapFragment localMapFragment; 

     public MapLocals(LocalMapFragment localMapFragment) { 

      this.localMapFragment = localMapFragment; 
     } 

     protected void onPreExecute() { 

     } 

     protected Local[] doInBackground(String... params) { 

      Local[] locals = null; 

      try { 

       LocalService localService = new LocalService(this.localMapFragment.getActivity(), 
         "/rest/localList.json"); 

       locals = localService.getLocalsFromUserCity(); 
      } catch (Exception ex) { 

       Log.e("APPERROR", ex.getMessage()); 
      } 

      return locals; 
     } 

     protected void onProgressUpdate(Integer... values) { 

     } 

     protected void onPostExecute(Local[] locals) { 

      this.localMapFragment.initMap(locals); 

      /* 
      * int x = 0; x = x + 2; 
      * 
      * FragmentActivity activity = (FragmentActivity) this.context; if 
      * (activity != null && !activity.isFinishing()) { 
      * 
      * initMap(locals); } 
      */ 
     } 
    } 
} 

로그 캣 : 당신이 그것에 로컬 시장을 칠하려고 할 때 아마 당신 GoogleMap으로 개체가 만들어지지 않습니다

10-04 11:00:04.566: E/AndroidRuntime(9542): FATAL EXCEPTION: main 
10-04 11:00:04.566: E/AndroidRuntime(9542): java.lang.RuntimeException: Unable to resume activity {com.myapp/com.myapp.HomeActivity}: java.lang.NullPointerException 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2760) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2216) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.app.ActivityThread.access$600(ActivityThread.java:149) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.os.Looper.loop(Looper.java:153) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.app.ActivityThread.main(ActivityThread.java:5086) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at dalvik.system.NativeStart.main(Native Method) 
10-04 11:00:04.566: E/AndroidRuntime(9542): Caused by: java.lang.NullPointerException 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at maps.ag.bg.b(Unknown Source) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at bob.onTransact(SourceFile:115) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.os.Binder.transact(Binder.java:326) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onResume(Unknown Source) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at com.google.android.gms.maps.SupportMapFragment$a.onResume(Unknown Source) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at com.google.android.gms.internal.bh$6.b(Unknown Source) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at com.google.android.gms.internal.bh.a(Unknown Source) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at com.google.android.gms.internal.bh.onResume(Unknown Source) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at com.google.android.gms.maps.SupportMapFragment.onResume(Unknown Source) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.support.v4.app.Fragment.performResume(Fragment.java:1521) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:963) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1887) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:460) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:449) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.app.Activity.performResume(Activity.java:5107) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2718) 
10-04 11:00:04.566: E/AndroidRuntime(9542):  ... 12 more 
+0

logcat에서 'HomeActivity' 재개 메소드에 널 포인터 예외가 있음을 나타냅니다. – GrIsHu

+0

거짓입니다. 디버깅을 마치고 HomeActivity onResume 메서드를 사용합니다. 나는 실제 문제가 "원인"에서 끝날 때까지라고 생각한다. – Dani

+0

mmmm, 지금은 문제가 AsyncTask가 아니라는 것을 알았습니다 ... 문제에 대해 알았습니다 ... – Dani

답변

0

. 당신이 GoogleMap으로 개체를 이미 가지고있는 경우 다시 AsyncTask를로부터 응답이 다시 확인 얻었다

/** 
    * Method to set up map. It must be called at onCreate() and onResume() to assure map has been initialized 
    */ 
    private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the map. 
     if (googleMap == null) { 
      SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(
        R.id.main_map); 
      GoogleMap gmap = mapFragment.getMap(); 

      // Check if we were successful in obtaining the map. 
      if (gmap != null) { 
       googleMap = new GoogleMapsManager(mapFragment, getBaseContext(), this); 
      } 
     } 
    } 

및 다음의 fragment "ONSTART()"안에 (구글 안드로이드 문서에 대한지도에서) TYou이 방법을 사용할 수있다 그 위에 마커를 놓습니다.