我有一個應用程序,我一直在努力。主要活動顯示使用Android版Google地圖類(v2)的地圖。有時,並不總是,當我啓動我的應用時,我會得到一個空指針。上次發生這種情況時,一天後停止發生,代碼沒有任何變化。我預感到地圖對象在查看logcat(下面發佈)後仍然不可用。零地圖組件在Android中初始化時的指針
所以我看了這個頁面:https://developers.google.com/maps/documentation/android/map(驗證地圖可用性部分),並且我已經確定地圖對象在onCreate中不爲null。
由於此問題是間歇性的,我只能猜測它與Google服務有關。我最近強制停止並清除了Google服務框架應用程序的數據,以嘗試更新到4.2.2(起訴我)。任何想法 - 有沒有人聽說過這個,還是有人知道如何解決它?
編輯:此代碼現在再次工作,完全如您在這裏看到的。我沒有改變任何東西。
所以我的問題是:什麼會導致這種行爲?我正在使用直接來自Google Maps for Android v2文檔的代碼檢查地圖對象(下面第142行的NPE)是否在onCreate(),onStart()和onResume()中爲null。
列入的onCreate(),在onStart()和的onResume()不應該允許這種...:
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.mainMap))
.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
// The Map is verified. It is now safe to manipulate the map.
logcat的:
02-14 13:33:03.190: E/AndroidRuntime(5448): Caused by: java.lang.NullPointerException
02-14 13:33:03.190: E/AndroidRuntime(5448): at maps.ar.b.a(Unknown Source)
02-14 13:33:03.190: E/AndroidRuntime(5448): at maps.y.h.a(Unknown Source)
02-14 13:33:03.190: E/AndroidRuntime(5448): at maps.y.au.a(Unknown Source)
02-14 13:33:03.190: E/AndroidRuntime(5448): at maps.y.ae.moveCamera(Unknown Source)
02-14 13:33:03.190: E/AndroidRuntime(5448): at com.google.android.gms.maps.internal.IGoogleMapDelegate$Stub.onTransact(IGoogleMapDelegate.java:83)
02-14 13:33:03.190: E/AndroidRuntime(5448): at android.os.Binder.transact(Binder.java:310)
02-14 13:33:03.190: E/AndroidRuntime(5448): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.moveCamera(Unknown Source)
02-14 13:33:03.190: E/AndroidRuntime(5448): at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source)
02-14 13:33:03.190: E/AndroidRuntime(5448): at com.tyler.ioio.MainActivity.onStart(MainActivity.java:142)
02-14 13:33:03.190: E/AndroidRuntime(5448): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1164)
02-14 13:33:03.190: E/AndroidRuntime(5448): at android.app.Activity.performStart(Activity.java:5114)
02-14 13:33:03.190: E/AndroidRuntime(5448): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
02-14 13:33:03.190: E/AndroidRuntime(5448): ... 11 more
MainActivity:
protected void onStart() {
super.onStart();
// This verification should be done during onStart() because the system
// calls this method when the user returns to the activity, which
// ensures the desired location provider is enabled each time the
// activity resumes from the stopped state.
mLocMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
final boolean gpsEnabled = mLocMan.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!gpsEnabled) {
new EnableGpsDialogFragment().show(getFragmentManager(),
"enableGpsDialog");
}
// Optimized code to go to location as fast as possible
Location firstLoc = mLocMan.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateNewFix(getBetterLocation(firstLoc, currentLoc));
// THIS IS LINE 142 : FORCE CLOSES
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, DEFAULT_ZOOM));
mMap.setOnMapClickListener(this);
您是在設備上還是在仿真器上測試它?如果你有一個真正的Android設備,你可能會遇到我剛纔遇到的同樣的問題。我的手機實際上並沒有關閉應用程序,所以當我以爲我正在啓動應用程序時,它真的會調用onResume()而不是onCreate(),這會導致未聲明的對象等問題。這可能不是很接近,但它聽起來可能是你的問題。 – 2013-02-14 20:37:48
你問題從這裏開始:com.tyler.ioio.MainActivity.onStart(MainActivity.java LINE#142)你可以發佈代碼來顯示你的MainActivity.java文件嗎? – petey 2013-02-14 21:26:44
@BenBenard這是一款設備。我試圖卸載應用程序之間的嘗試無濟於事。 – Tyler 2013-02-15 01:09:36