简体   繁体   English

错误java.lang.ClassNotFoundException:Google Map V2中的com.google.android.gms.maps.MapFragment

[英]Error java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment in Google Map V2

I am using Google Map V2 API for the map. 我正在使用Google Map V2 API来制作地图。 I have copied the google-play-services.jar in libs folder and set in the build path of eclipse. 我已经在libs文件夹中复制了google-play-services.jar,并在eclipse的构建路径中进行了设置。

I am getting exception as I added logcat. 因为我添加了logcat,我得到了异常。

Please help to get solve this issue. 请帮忙解决这个问题。

home_map_view.xml home_map_view.xml

<fragment
      android:id="@+id/map"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:name="com.google.android.gms.maps.MapFragment"
      android:layout_marginBottom="60dp"/>

AndroidManifest.xml AndroidManifest.xml中

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />

    <permission
        android:name="com.example.app.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <uses-permission android:name="com.example.app.permission.MAPS_RECEIVE"/>

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">

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

       <activity android:name=".MainActivity" android:label="@string/app_name" android:clearTaskOnLaunch="true" 
           android:configChanges="orientation" android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".HomeMapView" android:label="@string/title_home" android:configChanges="orientation" android:launchMode="singleTop" />
    </application>
</manifest>

HomeMapView.java HomeMapView.java

public class HomeMapView extends FragmentActivity implements OnTabChangeListener {

    private GoogleMap mapView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_map_view);

        // Getting reference to SupportMapFragment of the activity_main
        SupportMapFragment fragment = new SupportMapFragment(); 
        getSupportFragmentManager().beginTransaction() .add(R.id.map, fragment).commit(); 

        // Getting Map for the SupportMapFragment
        mapView = fragment.getMap();
        mapView.setMyLocationEnabled(true);
    }
}

Logcat: logcat的:

05-15 23:17:52.843: E/AndroidRuntime(19782): FATAL EXCEPTION: main
05-15 23:17:52.843: E/AndroidRuntime(19782): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.HomeMapView}: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.os.Looper.loop(Looper.java:130)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.app.ActivityThread.main(ActivityThread.java:3687)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at java.lang.reflect.Method.invokeNative(Native Method)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at java.lang.reflect.Method.invoke(Method.java:507)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at dalvik.system.NativeStart.main(Native Method)
05-15 23:17:52.843: E/AndroidRuntime(19782): Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:216)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.app.Activity.setContentView(Activity.java:1660)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at com.example.app.HomeMapView.onCreate(HomeMapView.java:61)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
05-15 23:17:52.843: E/AndroidRuntime(19782):    ... 11 more
05-15 23:17:52.843: E/AndroidRuntime(19782): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.support.v4.app.Fragment.instantiate(Fragment.java:395)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.support.v4.app.Fragment.instantiate(Fragment.java:363)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:264)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
05-15 23:17:52.843: E/AndroidRuntime(19782):    ... 20 more
05-15 23:17:52.843: E/AndroidRuntime(19782): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.example.app-2.apk]
05-15 23:17:52.843: E/AndroidRuntime(19782):    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
05-15 23:17:52.843: E/AndroidRuntime(19782):    at android.support.v4.app.Fragment.instantiate(Fragment.java:385)
05-15 23:17:52.843: E/AndroidRuntime(19782):    ... 23 more

You problem is the way you added google-play-services to your project: 您遇到的问题是您将google-play-services添加到项目中的方式:

I have copied the google-play-services.jar in libs folder and set in the build path of eclipse. 我已经在libs文件夹中复制了google-play-services.jar,并在eclipse的构建路径中进行了设置。

This is wrong! 这是错的! Read the first 3 steps of this blog post I wrote to get an idea of how to do it correctly: 阅读我写的这篇博客文章的前三个步骤,以了解如何正确地做到这一点:

Google Maps API V2 Google Maps API V2

In short, you should import google-play-services as a project in your workspace. 简而言之,您应该将google-play-services作为项目导入工作区。 and then reference it from your project. 然后从您的项目中引用它。

this should be the result: 这应该是结果:

在此输入图像描述

Use support Map fragment in place of Map fragment. 使用支持Map片段代替Map片段。 Make sure you have added the support libray 确保已添加支持库

<fragment
  android:id="@+id/map"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:name="com.google.android.gms.maps.SupportMapFragment "
  android:layout_marginBottom="60dp"/>

Second you should not copy the jar file to your build path. 其次,您不应该将jar文件复制到构建路径。

You should refer the google play services library project in your map project. 您应该在地图项目中引用Google Play服务库项目。

Import your library project to your worksace. 将您的库项目导入您的工作区。 import the same to eclipse. 导入相同的eclipse。

Right click on your project. 右键单击您的项目。 goto properties. 转到属性。 Choose android. 选择android。 click android. 点击android。 browse and add the library project. 浏览并添加库项目。

在此输入图像描述

If everything is woking same as google code then please check manifest file in my case i added geo key and map key that's why exception occurs, 如果一切都与谷歌代码相同,那么请检查我的情况下的清单文件我添加了地理位置密钥和映射密钥,这就是发生异常的原因,

Note - do not add two keys in manifest file remove map key 注意 - 不要在清单文件中添加两个键删除映射键

meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>

add this code. 添加此代码。

 <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/auto_location"/>

 <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Google Map API v2 java.lang.ClassNotFoundException:com.google.android.gms.maps.MapFragment - Google Map API v2 java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment ClassNotFoundException:使用Google Map API v2的com.google.android.gms.maps.MapFragment和SupportMapFragment - ClassNotFoundException: com.google.android.gms.maps.MapFragment and SupportMapFragment using Google Map API v2 ClassNotFoundException:与AndroidStudio的com.google.android.gms.maps.MapFragment - ClassNotFoundException: com.google.android.gms.maps.MapFragment with AndroidStudio Android Google Maps v2:ClassNotFoundExeption:com.google.android.gms.maps.MapFragment - Android Google Maps v2: ClassNotFoundExeption: com.google.android.gms.maps.MapFragment 在应用程序中使用地图时出错-com.google.android.gms.maps.MapFragment无法转换为android.support.v4.app.Fragment - Error using Map in app - com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment Google Maps class =“ com.google.android.gms.maps.MapFragment” - Google Maps class=“com.google.android.gms.maps.MapFragment” 找不到类“ com.google.android.gms.maps.MapFragment” - Could not find class 'com.google.android.gms.maps.MapFragment' java.lang.IllegalArgumentException:二进制XML文件第7行:带有com.google.android.gms.maps.MapFragment的另一个片段 - java.lang.IllegalArgumentException: Binary XML file line #7: with another fragment for com.google.android.gms.maps.MapFragment com.google.android.gms.maps.mapfragment和android.support.v4.app.fragment之间的区别 - difference between com.google.android.gms.maps.mapfragment and android.support.v4.app.fragment 错误android.support.v4.app.Fragment $ InstantiationException:无法实例化片段com.google.android.gms.maps.MapFragment - Error android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM