2013-07-23 36 views
7

Tôi có một MapFragment hiển thị bản đồIllegalStateException kích thước bản đồ không phải là 0

nếu người dùng đi ra khỏi hoạt động (hoặc các thiết bị đi ngủ) với bản đồ sau đó trở lại onResume được gọi và tôi di chuyển bản đồ trở lại điểm đánh dấu.

tuy nhiên khi tôi di chuyển camera tôi nhận được một ngoại lệ

07-23 16:28:42.725: E/AndroidRuntime(19095): java.lang.RuntimeException: Unable to resume activity {ecm2.android/ecm2.android.EMGNoteMapActivity}: java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view. 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.os.Looper.loop(Looper.java:137) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at java.lang.reflect.Method.invokeNative(Native Method) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at java.lang.reflect.Method.invoke(Method.java:511) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at dalvik.system.NativeStart.main(Native Method) 
07-23 16:28:42.725: E/AndroidRuntime(19095): Caused by: java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view. 
07-23 16:28:42.725: E/AndroidRuntime(19095): at maps.as.i.b(Unknown Source) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at maps.ah.w.a(Unknown Source) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at maps.ah.s.a(Unknown Source) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at maps.ah.an.b(Unknown Source) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at bgc.onTransact(SourceFile:92) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.os.Binder.transact(Binder.java:310) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.animateCamera(Unknown Source) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at com.google.android.gms.maps.GoogleMap.animateCamera(Unknown Source) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at ecm2.android.Fragments.EMGMap.centerOnNote(EMGMap.java:340) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at ecm2.android.Fragments.EMGMap.fetchMapSettings(EMGMap.java:283) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at ecm2.android.Fragments.EMGMap.onResume(EMGMap.java:289) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1820) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:412) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at android.app.Activity.performResume(Activity.java:5195) 
07-23 16:28:42.725: E/AndroidRuntime(19095): at  android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732) 
07-23 16:28:42.725: E/AndroidRuntime(19095): ... 12 more 

Đây là phong trào máy ảnh của tôi trên tôi onResume

if(map != null && northEast != null && southWest != null){ 
     map.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(southWest,northEast),10)); 
    }else if(map != null && centerPoint != null){ 
     CameraPosition position = new CameraPosition.Builder() 
     .target(centerPoint).zoom(17).build(); 
     map.animateCamera(CameraUpdateFactory.newCameraPosition(position)); 
    } 

Nếu tôi đưa ra các chuyển động của camera nó không sụp đổ nhưng không quay trở lại điểm của họ chuyển đi khỏi nó hoặc cái gì đó.

Tôi kiểm tra để đảm bảo rằng map không phải là rỗng vì vậy tôi không biết điều gì gây ra lỗi?

+1

Xem câu trả lời này: http://stackoverflow.com/a/13692908/937715 –

+0

Như câu trả lời trước được đề xuất, tôi đã đề xuất [this one] [1]. [1]: http://stackoverflow.com/a/17825157/1755300 – unmultimedio

Trả lời

10
Caused by: java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view. 

Điều này phải đủ rõ ràng. Bạn không thể gọi

map.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(southWest,northEast),10)); 

trước khi bố cục hoàn tất. Bạn cần sử dụng phiên bản 3 param thay thế.

Xem tài liệu ở đây: newLatLngBounds

Aternatively bạn có thể lắng nghe cách bố trí để hoàn thành thay vì gọi mã này trong onResume.

+0

làm thế nào tôi có thể lắng nghe khi bố trí xong mặc dù – tyczj

+0

http://stackoverflow.com/questions/11795862/i-want -to-measure-the-height-of-the-listview-gethight-0/11796244 # 11796244 –

Các vấn đề liên quan