[英]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.