0

我能夠看到地圖,但沒有放大到當前位置。代碼在try-catch塊中斷,看到Google Play Services missing !檢測片段中的地圖中的當前位置

**這就是崩潰發生**

map = mapFragment.getMap();

下面

全碼:

public class MyMapFragment extends Fragment implements 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener, 
    LocationListener { 

GoogleMap map; 
LatLng latlng; 
private LocationRequest lr; 
private LocationServices lc; //was LocationClient 
MapFragment mapFragment; 
//ImageView iv; 
private static View view; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


} 

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

    View view = inflater.inflate(R.layout.fragment_map, container, false); 

     SupportMapFragment mMapFragment = SupportMapFragment.newInstance(); 
     FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
     transaction.add(R.id.map_container, mMapFragment).commit(); 

     mapFragment = ((MapFragment) this.getActivity() 
       .getFragmentManager().findFragmentById(R.id.map_container)); 

     map = mapFragment.getMap(); **THIS IS WHERE THE CRASH HAPPENS ** 
     map.getUiSettings().setAllGesturesEnabled(false); 
     map.getUiSettings().setMyLocationButtonEnabled(false); 

     if (ContextCompat.checkSelfPermission(getActivity(), 
       Manifest.permission.ACCESS_FINE_LOCATION) // this might need massaged to 'android.permission.USE_FINGERPRINT' 
       != PackageManager.PERMISSION_GRANTED) { 
      map.setMyLocationEnabled(true); 
     } else { 
      map.setMyLocationEnabled(false); 
     } 

     map.getUiSettings().setZoomControlsEnabled(false); 

     MapsInitializer.initialize(getActivity()); 


    Toast.makeText(getActivity(), "Printing from MyMapFragment", Toast.LENGTH_LONG).show(); 
    return view; 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    Log.d("Attach", "on attach"); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
} 


@Override 
public void onConnected(@Nullable Bundle bundle) { 

} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onLocationChanged(Location location) { 

} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

} 
} 

Android的XML文件:R.layout.fragment_map.xml

​​

堆棧跟蹤

FATAL EXCEPTION: main 
                       Process: com.mavdev.gunfreebusinesses, PID: 29988 
                        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mavdev.gunfreebusinesses/com.mavdev.gunfreebusinesses.activities.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.MapFragment.getMap()' on a null object reference 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
                       at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5343) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.MapFragment.getMap()' on a null object reference 
                       at com.mavdev.gunfreebusinesses.fragments.MyMapFragment.onCreateView(MyMapFragment.java:77) 
                       at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
                       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
                       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) 
                       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
                       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) 
                       at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330) 
                       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547) 
                       at com.mavdev.gunfreebusinesses.activities.MainActivity.onStart(MainActivity.java:385) 
                       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1259) 
                       at android.app.Activity.performStart(Activity.java:6026) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)  
                       at android.app.ActivityThread.access$800(ActivityThread.java:155)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:135)  
                       at android.app.ActivityThread.main(ActivityThread.java:5343)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at java.lang.reflect.Method.invoke(Method.java:372)  
                       at  com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)  
+0

檢查我的編輯答案 – sasikumar

+0

您是否嘗試過使用'getMapAsync'?從我所知'getMap'現在已被棄用 – adjuremods

回答

1

XML代碼

 <fragment android:id="@+id/map_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:name="com.google.android.gms.maps.MapFragment"/> 

使用

GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map_container)).getMap(); 

,而不是

map = mapFragment.getMap(); 

在活動Ĵ AVA代碼

private MapFragment getMapFragment() { 
FragmentManager fm = null; 

Log.d(TAG, "sdk: " + Build.VERSION.SDK_INT); 
Log.d(TAG, "release: " + Build.VERSION.RELEASE); 

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
    // using getFragmentManager 
    fm = getFragmentManager(); 
} else { 
    //using getChildFragmentManager 
    fm = getChildFragmentManager(); 
} 

return (MapFragment) fm.findFragmentById(R.id.map_container); 
} 
+0

嗨@sasikumar - 我得到這個片段本身的錯誤。我正在嘗試在片段的onCreateView中:http://i.imgur.com/m2uAaQY.jpg – user1406716

相關問題