在android上设置Google maps API v2,错误膨胀类片段

时间:2013-03-07 02:18:45

标签: android google-maps-android-api-2 android-fragmentactivity

所以我正在关注Android的Google maps API v2,尝试在屏幕上获取基本地图。在完成所有步骤后,我得到一个“错误膨胀类片段”其他人遇到了同样的问题,但没有一个解决方案似乎工作。 确切错误:android.view.InflateException: Binary XML file line #10: Error inflating class fragment

的.java:

import android.os.Bundle;
import android.view.Menu;
import android.support.v4.app.FragmentActivity;


public class GoogleMaps extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_google_maps);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.google_maps, menu);
        return true;
    }

}

的xml:

<RelativeLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".GoogleMaps" >
    <fragment 
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"
        android:name="com.testing.svma.MainActivity"/>
</RelativeLayout>

我认为我已经正确设置了Google Play服务,它要求在第一次导航页面时下载它们。这是我的project.properties:

# Project target.
target=android-17
android.library=false
android.library.reference.1=../../../android-sdks/extras/google/google_play_services/libproject/google-play-services_lib

log cat:

...
03-06 21:12:44.751: I/System.out(9122): Debugger has connected
03-06 21:12:44.751: I/System.out(9122): waiting for debugger to settle...
03-06 21:12:46.166: I/System.out(9122): debugger has settled (1487)
03-06 21:12:50.634: D/dalvikvm(9122): DexOpt: couldn't find field Landroid/content/res/Configuration;.smallestScreenWidthDp
03-06 21:12:50.634: W/dalvikvm(9122): VFY: unable to resolve instance field 23
03-06 21:12:50.634: D/dalvikvm(9122): VFY: replacing opcode 0x52 at 0x0012
03-06 21:12:50.634: D/dalvikvm(9122): VFY: dead code 0x0014-0018 in Lcom/google/android/gms/common/GooglePlayServicesUtil;.b (Landroid/content/res/Resources;)Z
03-06 21:12:51.126: W/dalvikvm(9122): Unable to resolve superclass of Lmaps/p/s; (427)
03-06 21:12:51.126: W/dalvikvm(9122): Link of class 'Lmaps/p/s;' failed
03-06 21:12:51.126: W/dalvikvm(9122): Unable to resolve superclass of Lmaps/y/bo; (3820)
03-06 21:12:51.126: W/dalvikvm(9122): Link of class 'Lmaps/y/bo;' failed
03-06 21:12:51.126: W/dalvikvm(9122): Unable to resolve superclass of Lmaps/i/k; (4208)
03-06 21:12:51.126: W/dalvikvm(9122): Link of class 'Lmaps/i/k;' failed
03-06 21:12:51.126: E/dalvikvm(9122): Could not find class 'maps.i.k', referenced from method maps.z.ag.a
03-06 21:12:51.126: W/dalvikvm(9122): VFY: unable to resolve new-instance 3540 (Lmaps/i/k;) in Lmaps/z/ag;
03-06 21:12:51.126: D/dalvikvm(9122): VFY: replacing opcode 0x22 at 0x006d
03-06 21:12:51.149: D/dalvikvm(9122): VFY: dead code 0x006f-007f in Lmaps/z/ag;.a (Landroid/view/LayoutInflater;Lcom/google/android/gms/maps/GoogleMapOptions;ZLjava/lang/String;)Lmaps/z/ag;

我尝试过这些线程的解决方案但没有运气:

Error inflating class fragment

Google Maps V2 - Error inflating class Fragment

我也跟着这个教程并得到了同样的错误:

https://www.youtube.com/watch?v=OZRgiwGfvSQ

5 个答案:

答案 0 :(得分:1)

此问题通常源于您的项目缺少android-support库。发生这种情况是因为旧版本的api片段不存在,因此您需要添加此库以便在旧版Android中添加对片段的支持。

要执行此操作,请右键单击您的项目,然后:

enter image description here

此外,您可以浏览我在您的应用程序中实施Google地图时写的博客文章:

Google Maps API V2

答案 1 :(得分:1)

我遇到了同样的问题并且尝试了每个可能的2天,但是我改变了我的布局xml文件,在java代码中我使用了supportmapfragment

还从包浏览器

导入android支持库
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

<fragment
        android:name="com.google.android.gms.maps.SupportMapFragment"

        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

答案 2 :(得分:1)

我通过在清单中添加这些行来修复此问题。

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

答案 3 :(得分:0)

按照此link

中的所有步骤操作

您错过了参考Google地图 在您的代码中添加此内容

public class GoogleMaps extends FragmentActivity {
    private GoogleMap mMap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_google_maps);
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.google_maps, menu);
        return true;
    }

}

除了添加地图密钥,添加播放服务到项目

答案 4 :(得分:0)

我遇到了同样的错误,并设法通过差异stackoverflow答案的多次尝试来解决它:

不确定哪个是帮助解决问题的那个,但我只列出我做过的事情:

  • 右键单击项目 - &gt;属性 - &gt; Android - &gt;将项目构建目标更改为Android 4.1.2(Android开源项目) - &gt;在“图书馆”下,删除google-play-service-lib并将其添加回来 - &gt;点击“应用” - &gt;请按“确定”
  • 右键单击项目 - &gt; Android工具 - &gt;修复项目属性(Emil Adz
  • 在课堂上引用Google地图(Basavaraj Hampali

    private GoogleMap mMap;
    
    mMap = ((SupportMapFragment) this.getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
    if (mMap== null) {
        Toast.makeText(this,"Map not Available", Toast.LENGTH_LONG).show();
    }
    
  • 扩展android.support.v4.app.FragmentActivity而不只是“FragmentActivity”(ayush1794

    extends android.support.v4.app.FragmentActivity
    

希望它有所帮助:)