1

,當我試圖把標記在谷歌地圖placeMarker方法,我得到的NullPointerExceptionNullPointerException異常當試圖將標記在谷歌地圖V2

NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference` 
I/DpmTcmClient: RegisterTcmMonitor from: org.apache.http.impl.conn.TcmIdleTimerMonitor 
W/DynamiteModule: Local module descriptor class for com.google.android.gms.googlecertificates not found. 
I/DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:2 
I/DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version >= 2 
D/GoogleCertificates: com.google.android.gms.googlecertificates module is loaded 
E/url: http://maps.googleapis.com/maps/api/geocode/json?latlng=35.7742618,51.3596331&sensor=true 
E/Lat Long to Addresss: 
E/Googlemap: null 
D/GoogleCertificatesImpl: Fetched 363 Google certificates 
I/b: Sending API token request. 
E/b: Authentication failed on the server. 
E/Google Maps Android API: Authorization failure 
Ensure that the "Google Maps Android API v2" is enabled. 
                       Ensure that the following Android Key exists: 

而且我用getAsyncMap和OnMapReady(),裏面OnMapReady我調用Asynktask獲取用戶的位置和onPostExecute placeMarker方法被調用:

public void placeMarker(LatLongDetails user_latlongobj2, 
final Context contextPlace) { 


try { 
if (googlemap == null) { 
    intialiseMap(); 
    animatecamera(user_latlongobj); 
} 
if (LoginDetails.Address.length() < 1) { 
    LoginDetails.Address = "Getting your location ....."; 
} 
googlemap.clear(); 
marker = new MarkerOptions().position(
     new LatLng(user_latlongobj2.user_latitude, 
       user_latlongobj2.user_longitude)).title(
     LoginDetails.Address); 

System.out.println("This is the Address" + LoginDetails.Address); 

marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)); 


googlemap.addMarker(marker).showInfoWindow(); 
System.out.println("PLACING MARKER" + LoginDetails.Address); 
if (marker == null || contextPlace == null) { 
    Intent in =new Intent(this,ProfileActivity1.class); 
    in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(in); 
} 
else 
fixmarker(marker, contextPlace); 

} catch (Exception e) { 
fixmarker(marker, contextPlace); 
Log.d("Profileactivity", "" + e); 
    } 

} 

所有這些問題來了,當我試圖改變的GetMap()來getAsyncMap()還請選中該link而上完整的整個活動

我刪除try和catch來了解詳情約error.here是logcat的:

enter code herejava.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference 
                      at android.content.ContextWrapper.getResources(ContextWrapper.java:87) 
                      at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81) 
                      at android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity.java:551) 
                      at android.content.Context.getString(Context.java:413) 
                      at com.example.cabbookinghome.ProfileActivity1.intialiseMap(ProfileActivity1.java:280) 
                      at com.example.cabbookinghome.ProfileActivity1.placeMarker(ProfileActivity1.java:327) 
                      at epbit.helper.ConversionTaskLatLonLoc.onPostExecute(ConversionTaskLatLonLoc.java:130) 
                      at epbit.helper.ConversionTaskLatLonLoc.onPostExecute(ConversionTaskLatLonLoc.java:24) 
                      at android.os.AsyncTask.finish(AsyncTask.java:651) 
                      at android.os.AsyncTask.access$500(AsyncTask.java:180) 
                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
+0

無法訪問發表您的完整logcat的一個片段的方法。 – Raghavendra

+0

我加了logcat。 –

+0

在logcat和NLP中,它還會說E/Google Maps Android API:授權失敗確保已啓用「Google Maps Android API v2」。請檢查在谷歌控制檯其啓用或不 – Raghavendra

回答

2

後3天搜索,在這裏它的工作終於worked.the真正的問題是什麼的GoogleMap爲null,這意味着地圖不loaded.I使用try和catch,但你永遠不應該只是趕上和異常,做沒有。 登錄後的異常,檢查日誌,我發現這一點:

com.google.android.gms.maps.MapFragment.getMap()' on a null object reference 

首先我想這個鏈接Google Map returning nullpointerexception Google Maps Android V2

googleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap(); 

然後getChildFragmentManager變成紅色表示getChildFragmentManager()無法解析,或者不能被referenced.using getSupportFragmentManager()代替這個鏈接中描述的 (getChildFragmentManager() cannot be resolved or cannot be referenced)終於解決了這個問題並且map已經加載了

googlemap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapfragment)).getMap(); 

請注意,如果您的類從AppCompatActivity擴展然後,您需要使用getSupportFragmentManager() 因爲getChildFragmentManager()AppCompatActivity

0

這是因爲谷歌地圖目標後,如果聲明澄清。刪除googlemap.clear()並嘗試。

+0

但他在googlemap.clear()後添加了標記。 –

+0

嘗試我仍然有nullPoinetException –

+0

更新您的代碼和問題中的錯誤。我會盡力弄清楚。 –

0

您的地圖不會初始化或不會獲得您的位置。檢查位置傳感器是否有效。如果沒有,請激活它。你可以試試這個代碼。

private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the map. 
     if (mMap == null) { 
      // Try to obtain the map from the SupportMapFragment. 
      mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 
      // Check if we were successful in obtaining the map. 
      if (mMap != null) { 
       setUpMap(); 
      } 
     } 
    } 

    private void setUpMap() { 
     mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
     mMap.setMyLocationEnabled(true); 


    } 
+0

getMap被depreceted所有這些問題出現,當我們嘗試使用getAsyncMap而不是 –