引起:java.lang.ClassCastException:android.widget.FrameLayout无法强制转换为com.google.android.maps.MapView

时间:2014-02-20 16:05:00

标签: android-mapview android-maps-v2

我的地图很好用。我正在尝试添加GPS来定位用户位置。我正在学习本教程[http://www.youtube.com/watch?v=wKz04cs660E],但它对我不起作用。

这是我的Main.java

package com.anilraj.map;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class Main extends MapActivity {

    MapView view;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        view = (MapView)findViewById(R.id.mvMain);
        view.setBuiltInZoomControls(true);

        final MapController control = view.getController();

        LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        LocationListener listener = new LocationListener() {

            @Override
            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderEnabled(String arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderDisabled(String arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onLocationChanged(Location location) {
                control.setCenter(new GeoPoint((int)location.getLatitude(), (int)location.getLongitude()));

            }
        };

        manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);       

    }


    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

}

这是我的main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main" >

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

</FrameLayout>

关于我的Androidmanifest.xml,我拥有所有必需的权限,使用了功能,库,元数据。

这是我的LogCat

02-20 17:35:09.681: D/AbsListView(6380): Get MotionRecognitionManager
02-20 17:35:09.681: D/AbsListView(6380): onVisibilityChanged() is called, visibility : 8
02-20 17:35:09.681: D/AbsListView(6380): unregisterIRListener() is called 
02-20 17:35:09.691: D/AbsListView(6380): onVisibilityChanged() is called, visibility : 8
02-20 17:35:09.691: D/AbsListView(6380): unregisterIRListener() is called 
02-20 17:35:09.691: D/AbsListView(6380): onVisibilityChanged() is called, visibility : 0
02-20 17:35:09.691: D/AbsListView(6380): unregisterIRListener() is called 
02-20 17:35:09.711: D/AndroidRuntime(6380): Shutting down VM
02-20 17:35:09.711: W/dalvikvm(6380): threadid=1: thread exiting with uncaught exception (group=0x418a4898)
02-20 17:35:09.711: W/ActivityThread(6380): ClassLoader.loadClass: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
02-20 17:35:09.721: E/AndroidRuntime(6380): FATAL EXCEPTION: main
02-20 17:35:09.721: E/AndroidRuntime(6380): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.anilraj.map/com.anilraj.map.Main}: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to com.google.android.maps.MapView
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.app.ActivityThread.access$700(ActivityThread.java:159)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.os.Looper.loop(Looper.java:137)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.app.ActivityThread.main(ActivityThread.java:5419)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at java.lang.reflect.Method.invokeNative(Native Method)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at java.lang.reflect.Method.invoke(Method.java:525)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at dalvik.system.NativeStart.main(Native Method)
02-20 17:35:09.721: E/AndroidRuntime(6380): Caused by: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to com.google.android.maps.MapView
02-20 17:35:09.721: E/AndroidRuntime(6380):     at com.anilraj.map.Main.onCreate(Main.java:24)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.app.Activity.performCreate(Activity.java:5372)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
02-20 17:35:09.721: E/AndroidRuntime(6380):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
02-20 17:35:09.721: E/AndroidRuntime(6380):     ... 11 more
02-20 17:35:12.213: I/Process(6380): Sending signal. PID: 6380 SIG: 9

1 个答案:

答案 0 :(得分:0)

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

添加支持片段可以解决问题.Class Cast的其他原因可能是权限

<permission
android:name="com.packagename.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.packagename.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />



<application>
<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="YOUR_API_KEY" />
</application>