Java 使用CameraUpdate时如何修复此错误
使用以下命令时出现此错误:Java 使用CameraUpdate时如何修复此错误,java,android,google-maps-api-2,Java,Android,Google Maps Api 2,使用以下命令时出现此错误: CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 16); 我从其他帖子中看到了我需要使用的内容 addOnGlobalLayoutListener 但我试过了,但似乎无法让它发挥作用 03-11 12:00:18.496 11035-11035/project.sharethefare E/AndroidRuntime﹕ FATAL EXCEPTION: main Process
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 16);
我从其他帖子中看到了我需要使用的内容
addOnGlobalLayoutListener
但我试过了,但似乎无法让它发挥作用
03-11 12:00:18.496 11035-11035/project.sharethefare E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: project.sharethefare, PID: 11035
java.lang.RuntimeException: Unable to start activity ComponentInfo{project.sharethefare/project.sharethefare.Share}: java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout cannot be cast to android.widget.LinearLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2725)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5834)
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:1388)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
Caused by: java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout cannot be cast to android.widget.LinearLayout
at project.sharethefare.Share.setUpMap(Share.java:105)
at project.sharethefare.Share.setUpMapIfNeeded(Share.java:82)
at project.sharethefare.Share.onCreate(Share.java:53)
at android.app.Activity.performCreate(Activity.java:6221)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2725)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5834)
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:1388)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
03-11 12:00:21.816 13207-13207/project.sharethefare E/Zygote﹕ MountEmulatedStorage()
03-11 12:00:21.816 13207-13207/project.sharethefare E/Zygote﹕ v2
我得到的错误代码部分是:
private void setUpMap() {
final List <Marker> markers= new ArrayList<>();
if(alreadyInit==false){
marker = mMap.addMarker(new MarkerOptions().position(new LatLng(home.curLat,home.curLong)).title("Marker"));
markers.add(marker);
alreadyInit=true;
}
matchLocLat = client.getlat();
matchLocLong = client.getlong();
if(alreadyInit==true){
marker = mMap.addMarker(new MarkerOptions().position(new LatLng(matchLocLat, matchLocLong)).title("Marker"));
markers.add(marker);
LinearLayout mapLayout = (LinearLayout)findViewById(R.id.shared_map);
mapLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : markers) {
builder.include(marker.getPosition());
}
LatLngBounds bounds = builder.build();
int padding = 0 ; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 16);
mMap.animateCamera(cu);
}
});
}
private void setUpMap(){
最终列表标记=新的ArrayList();
if(alreadyInit==false){
marker=mMap.addMarker(新MarkerOptions().position(新LatLng(home.curLat,home.curLong)).title(“marker”);
标记。添加(标记);
alreadyInit=true;
}
matchLocLat=client.getlat();
matchLocLong=client.getlong();
if(alreadyInit==true){
marker=mMap.addMarker(newmarkeroptions().position(new LatLng(matchLocLat,matchLocLong)).title(“marker”);
标记。添加(标记);
LinearLayout mapLayout=(LinearLayout)findViewById(R.id.shared_map);
mapLayout.getViewTreeObserver().addOnGlobalLayoutListener(新ViewTreeObserver.OnGlobalLayoutListener()){
@凌驾
公共图书馆{
LatLngBounds.Builder=新的LatLngBounds.Builder();
用于(标记:标记){
include(marker.getPosition());
}
LatLngBounds bounds=builder.build();
int padding=0;//与贴图边缘的偏移量(以像素为单位)
CameraUpdate cu=CameraUpdateFactory.newLatLngBounds(边界,16);
mMap.animateCamera(cu);
}
});
}
我非常感谢您的帮助和我将回答的任何问题。shared_map
R.id.shared_map
不是线性布局,因此您不能将其转换为线性布局。它与CameraUpdateFactory无关。newLatLngBounds(bounds,16)
因为getViewTreeObserver()是在视图上实现的
,一个解决方案就是去掉cast,假设R.id.shared\u map
真的代表了你想要得到的ViewTreeObserver
的任何内容。这一切归结起来就是:java.lang.ClassCastException:android.support.v4.app.nosvestateframelayout不能是cast to android.widget.LinearLayout您试图将对象强制转换为与之没有is-a关系的类型。好吧,我明白您的意思,如何摆脱强制转换?如我如何编写此代码