Android的谷歌地图 [英] Android google map

查看:116
本文介绍了Android的谷歌地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试添加谷歌地图API第2版中我的application.but我得到异常。例外的是

 了java.lang.RuntimeException:无法启动活动ComponentInfo {info.androidhive.googlemapsv2 / info.androidhive.googlemapsv2.MainActivity}:android.view.InflateException:二进制XML文件中的行# 5:错误充气类片段
 

下面是我的XML类

 < XML版本=1.0编码=UTF-8&GT?;
< RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT>
    <片段
        机器人:ID =@ + ID /图
        机器人:名称=com.google.android.gms.maps.MapFragment
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent/>

< / RelativeLayout的>
 

这是我的主类

 公共类MainActivity延伸活动{
    私人GoogleMap的_googleMap = NULL;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        尝试
        {
            //加载地图
            initilizeMap();
            _googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

            _googleMap.setMyLocationEnabled(真正的);

        }赶上(例外五){
            e.printStackTrace();
        }
    }


    私人无效initilizeMap(){
        如果(_googleMap == NULL)
        {
            _googleMap =((MapFragment)getFragmentManager()findFragmentById(R.id.map)。)的GetMap()。
            如果(_googleMap == NULL){
                Toast.makeText(getApplicationContext(),
                        对不起!无法创建地图,Toast.LENGTH_SHORT)
                        。显示();
            }
        }

    }

    @覆盖
    保护无效onResume(){
        // TODO自动生成方法存根
        super.onResume();
        initilizeMap();
    }

}
 

这是我的logcat

  01-31 14:20:55.603:E / AndroidRuntime(311):致命异常:主要
01-31 14:20:55.603:E / AndroidRuntime(311):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.example.demo / com.example.demo.MainActivity}:android.view.InflateException:二进制XML文件,6号线:错误充气类片段
01-31 14:20:55.603:E / AndroidRuntime(311):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.os.Handler.dispatchMessage(Handler.java:99)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.os.Looper.loop(Looper.java:123)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.app.ActivityThread.main(ActivityThread.java:4627)
01-31 14:20:55.603:E / AndroidRuntime(311):在java.lang.reflect.Method.invokeNative(本机方法)
01-31 14:20:55.603:E / AndroidRuntime(311):在java.lang.reflect.Method.invoke(Method.java:521)
01-31 14:20:55.603:E / AndroidRuntime(311):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
01-31 14:20:55.603:E / AndroidRuntime(311):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-31 14:20:55.603:E / AndroidRuntime(311):在dalvik.system.NativeStart.main(本机方法)
01-31 14:20:55.603:E / AndroidRuntime(311):android.view.InflateException:二进制XML文件,6号线:错误充气类片段产生的原因
01-31 14:20:55.603:E / AndroidRuntime(311):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.view.LayoutInflater.inflate(LayoutInflater.java:407)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.view.LayoutInflater.inflate(LayoutInflater.java:320)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.view.LayoutInflater.inflate(LayoutInflater.java:276)
01-31 14:20:55.603:E / AndroidRuntime(311):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.app.Activity.setContentView(Activity.java:1647)
01-31 14:20:55.603:E / AndroidRuntime(311):在com.example.demo.MainActivity.onCreate(MainActivity.java:22)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
01-31 14:20:55.603:E / AndroidRuntime(311):11 ...更多
01-31 14:20:55.603:E / AndroidRuntime(311):抛出java.lang.ClassNotFoundException:产生的原因android.view.fragment装载机dalvik.system.PathClassLoader [/data/app/com.example.demo-2 apk文件]
01-31 14:20:55.603:E / AndroidRuntime(311):在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
01-31 14:20:55.603:E / AndroidRuntime(311):在java.lang.ClassLoader.loadClass(ClassLoader.java:573)
01-31 14:20:55.603:E / AndroidRuntime(311):在java.lang.ClassLoader.loadClass(ClassLoader.java:532)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.view.LayoutInflater.createView(LayoutInflater.java:466)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.view.LayoutInflater.onCreateView(LayoutInflater.java:544)
01-31 14:20:55.603:E / AndroidRuntime(311):在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
01-31 14:20:55.603:E / AndroidRuntime(311):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
 

解决方案

您应该使用 SupportMapFragment 而不是 MapFragment

修改

 <片段
    机器人:ID =@ + ID /图
    机器人:名称=com.google.android.gms.maps.MapFragment
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent/>
 

 <片段
机器人:ID =@ + ID /图
机器人:名称=com.google.android.gms.maps.SupportMapFragment
机器人:layout_width =match_parent
机器人:layout_height =match_parent/>
 

也改变

  _googleMap =((MapFragment)getFragmentManager()findFragmentById(R.id.map)。)的GetMap()。
 

  _googleMap =((SupportMapFragment)getSupportFragmentManager()。findFragmentById(
        R.id.map))的GetMap()。
 

和另外如果你使用的是碎片的旧设备(pre蜂窝),你应该始终扩展你的活动 FragmentActivity

,并检查

添加了谷歌播放服务版本的应用程序的清单

  

编辑应用程序的Andr​​oidManifest.xml文件,并添加   继元素中声明。这将嵌入的版   谷歌播放的应用程序编译时使用的服务。

您只需要添加<元数据> <应用> 标签到你的的Andr​​oidManifest.xml

  ...<应用>
<元数据的android:NAME =com.google.android.gms.version
 机器人:值=@整数/ google_play_services_version/>
< /用途>
 

这是因为最新的谷歌播放服务需要一个版本名称,这是使用&LT被提及;元数据.. />里面的Andr​​oidManifest.xml

I am try to add Google MAP Api v2 in my application.but I am getting exception. Exception is

 java.lang.RuntimeException: Unable to start activity ComponentInfo{info.androidhive.googlemapsv2/info.androidhive.googlemapsv2.MainActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class fragment

Here is my xml class

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

this is my main class

public class MainActivity extends Activity {
    private GoogleMap _googleMap=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try
        {
            //loading map
            initilizeMap();
            _googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

            _googleMap.setMyLocationEnabled(true);       

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private void initilizeMap() {
        if(_googleMap==null)
        {
            _googleMap=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
            if (_googleMap == null) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        initilizeMap();
    }

}

this is my logcat

01-31 14:20:55.603: E/AndroidRuntime(311): FATAL EXCEPTION: main
01-31 14:20:55.603: E/AndroidRuntime(311): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.demo/com.example.demo.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.os.Looper.loop(Looper.java:123)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-31 14:20:55.603: E/AndroidRuntime(311):  at java.lang.reflect.Method.invokeNative(Native Method)
01-31 14:20:55.603: E/AndroidRuntime(311):  at java.lang.reflect.Method.invoke(Method.java:521)
01-31 14:20:55.603: E/AndroidRuntime(311):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-31 14:20:55.603: E/AndroidRuntime(311):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-31 14:20:55.603: E/AndroidRuntime(311):  at dalvik.system.NativeStart.main(Native Method)
01-31 14:20:55.603: E/AndroidRuntime(311): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
01-31 14:20:55.603: E/AndroidRuntime(311):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.app.Activity.setContentView(Activity.java:1647)
01-31 14:20:55.603: E/AndroidRuntime(311):  at com.example.demo.MainActivity.onCreate(MainActivity.java:22)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
01-31 14:20:55.603: E/AndroidRuntime(311):  ... 11 more
01-31 14:20:55.603: E/AndroidRuntime(311): Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/com.example.demo-2.apk]
01-31 14:20:55.603: E/AndroidRuntime(311):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
01-31 14:20:55.603: E/AndroidRuntime(311):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
01-31 14:20:55.603: E/AndroidRuntime(311):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.view.LayoutInflater.createView(LayoutInflater.java:466)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:544)
01-31 14:20:55.603: E/AndroidRuntime(311):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
01-31 14:20:55.603: E/AndroidRuntime(311):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)

解决方案

You should use SupportMapFragment instead of MapFragment.

Change

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

to

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

Also change

   _googleMap=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();

to

_googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
        R.id.map)).getMap(); 

And also If you're using fragments on older devices (pre Honeycomb) you should always extend your Activity from FragmentActivity.

and also check

Add the Google Play services version to your app's manifest

Edit your application's AndroidManifest.xml file, and add the following declaration within the element. This embeds the version of Google Play services that the app was compiled with.

You just need to add <meta-data> under <application> tag into your AndroidManifest.xml

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

This is because latest google play services requires a version name, which is to be mentioned using <meta-data .. /> inside AndroidManifest.xml

这篇关于Android的谷歌地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆