2015-03-13 57 views
1

大多數例子我能找到的淨使用現在已經過時的GetMap()方法。 Google說使用getMapAsync()。我可以在我的地圖上繪製標記,但是當我包含邊界代碼時,我得到一個IllegalStateException。所以,我的問題我該如何正確設置LatLngBounds.Builder?GOOGLEMAPS設定Android的界定

代碼和logcat的遵循:

public class TripsMap extends FragmentActivity implements OnMapReadyCallback { 
MapView mMapView; 
private GoogleMap googleMap; 
GoogleMapOptions options = new GoogleMapOptions(); 
private LatLngBounds.Builder bounds; 

Trips trip; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.trips_map_fragment); 

    Bundle extras = getIntent().getExtras(); 
    trip = (Trips) extras.getSerializable("tripInfo"); 

    MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 

} 


@Override 
public void onMapReady(GoogleMap googleMap) { 
    bounds = new LatLngBounds.Builder(); 

    int subTrips = trip.getSubtripsNum(); 

    for (int i=0; i<subTrips; i++) { 
     SubTrips st = trip.getSubTrips().get(i); 

     //major origin 
     googleMap.addMarker(new MarkerOptions() 
       .position(convertLatLng(st.originCoords)) 
       .title(st.origin)); 
     Log.i("MAJOR", st.origin); 

     //use .include to put add each point to be included in the bounds 
     bounds.include(convertLatLng(st.originCoords)); 


     int minor = st.intermediateStation.size(); 
     for (int j=0; j<minor; j++){ 
      IntermediateStops is = st.intermediateStation.get(j); 

      //minor stop 
      googleMap.addMarker(new MarkerOptions() 
        .position(convertLatLng(is.coords)) 
        .title(is.stationName)); 

     } 

     //major destination 
     googleMap.addMarker(new MarkerOptions() 
       .position(convertLatLng(st.destCoords)) 
       .title(st.destination)); 

     bounds.include(convertLatLng(st.destCoords)); 

    } 

    googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds.build(), 50)); 

} 

public LatLng convertLatLng(String s) { 
    String[] latlong = s.split(","); 
    double latitude = Double.parseDouble(latlong[0]); 
    double longitude = Double.parseDouble(latlong[1]); 
    LatLng ll = new LatLng(latitude, longitude); 
    return ll; 
} 

}

的logcat:

FATAL EXCEPTION: main 
java.lang.IllegalStateException: Error using newLatLngBounds(LatLngBounds, int): Map size can't be 0. Most likely, layout has not yet occured for the map view. Either wait until layout has occurred or use newLatLngBounds(LatLngBounds, int, int, int) which allows you to specify the map's dimensions. 
     at com.google.k.a.cj.b(Unknown Source) 
     at com.google.maps.api.android.lib6.gmm6.c.c.a(Unknown Source) 
     at com.google.maps.api.android.lib6.c.dp.a(Unknown Source) 
     at com.google.maps.api.android.lib6.gmm6.c.c.a(Unknown Source) 
     at com.google.maps.api.android.lib6.c.el.a(Unknown Source) 
     at com.google.android.gms.maps.internal.l.onTransact(SourceFile:83) 
     at android.os.Binder.transact(Binder.java:326) 
     at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.moveCamera(Unknown Source) 
     at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source) 
     at mtr.se.reskoll.TripsMap.onMapReady(TripsMap.java:87) 
     at com.google.android.gms.maps.MapFragment$a$1.a(Unknown Source) 
     at com.google.android.gms.maps.internal.m$a.onTransact(Unknown Source) 
     at android.os.Binder.transact(Binder.java:326) 
     at com.google.android.gms.maps.internal.ba.a(SourceFile:82) 
     at com.google.maps.api.android.lib6.c.er.run(Unknown Source) 
     at android.os.Handler.handleCallback(Handler.java:615) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4898) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
     at dalvik.system.NativeStart.main(Native Method) 

回答

0

使用此

SupportMapFragment mapFragment =(SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); 

,而不是

也可能是
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 

的問題,由於該原因,文件中提到的here

不要使用此相機更新更改相機直至地圖有 經歷佈局(以這種方法來正確地確定 適當的邊框和縮放級別,地圖的尺寸​​必須)。 否則會拋出IllegalStateException異常。它不是足夠 地圖爲可用於(即的GetMap()返回一個 非空對象);包含地圖視圖必須也發生 佈局,使得它的尺寸已被確定。如果你不能 肯定,這已發生,而不是使用newLatLngBounds(的LatLngBounds,INT, INT,INT)和手動提供地圖的尺寸​​。

+0

當我有如何被一個應該硬代碼與寬度和高度的片段設置爲match_parent和WRAP_CONTENT該成像素? – tomislav2012 2015-03-13 12:37:11