2013-10-04 30 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); } 
      */ 
     } 
    } 
} 

logcat的:

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對象。 T優可以使用此方法(從谷歌地圖Android版文檔)的fragement「在onStart()」內:

/** 
    * 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); 
      } 
     } 
    } 

當你有你的迴應來自的AsyncTask回來,再次檢查,如果你已經有了這個GoogleMap對象和然後把標記放在它上面。