【问题标题】:Google maps Android only white screen is shown谷歌地图安卓只显示白屏
【发布时间】:2013-01-09 14:25:49
【问题描述】:

我完成了添加谷歌地图 api 的程序,但我收到了这个错误。抱歉语言不好。

09 12:20:55.359: W/dalvikvm(5918): Unable to resolve superclass of Lmaps/a/du; (406)
01-09 12:20:55.359: W/dalvikvm(5918): Link of class 'Lmaps/a/du;' failed
01-09 12:20:55.359: W/dalvikvm(5918): Unable to resolve superclass of Lmaps/a/ej; (2358)
01-09 12:20:55.359: W/dalvikvm(5918): Link of class 'Lmaps/a/ej;' failed
01-09 12:20:55.359: W/dalvikvm(5918): Unable to resolve superclass of Lmaps/j/k; (2374)
01-09 12:20:55.359: W/dalvikvm(5918): Link of class 'Lmaps/j/k;' failed
01-09 12:20:55.359: E/dalvikvm(5918): Could not find class 'maps.j.k', referenced from method maps.y.ae.a
01-09 12:20:55.359: W/dalvikvm(5918): VFY: unable to resolve new-instance 3566 (Lmaps/j/k;) in Lmaps/y/ae;

这里是 manifest.xml

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="com.comparto.piso.permission.MAPS_RECEIVE" />
 <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" />

 <permission
        android:name="com.comparto.piso.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

       <application
              ........ >
            <uses-library android:name="com.google.android.maps" />
   <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="api key" />
    ......
    .....

在 java 代码中,我扩展了 FragmentActivity,这里是 onCreate 代码

GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(getApplicationContext());

        GoogleMap map = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map)).getMap();
        if (map != null) {
            map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        }

这里是布局xml

 <fragment
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/map"
                android:layout_width="fill_parent"
                android:layout_height="300px"
                class="com.google.android.gms.maps.SupportMapFragment" />

【问题讨论】:

  • 你的混淆不起作用,我猜
  • 请编辑并添加代码的相关部分。即使您不懂英语,这也不是提问的方式。
  • 好的,我现在编辑添加更多代码。对不起
  • 关闭proguard并显示正常日志)
  • 嘿,达米安,我一直在使用 Maps,问题是我从未在清单上声明过 api 密钥,并且总是在我的观点上尝试这样做并告诉我它是否有效,我'如果是这样的话,我不肯定

标签: java android xml google-maps


【解决方案1】:

如果您的设备与 Google 地图库使用的 API 级别不同,则 logcat 中 Dalvik 的所有“无法解析超类 xxxx”和“类 xxxx 的链接失败”都是正常的。

您应该使用以下命令检查您是否遇到授权失败:

adb logcat | grep Maps

如果你看到这样的东西:

E/Google Maps Android API(): Authorization failure.

那么这意味着您没有在清单中提供正确的 API 密钥。再次检查您的Google API Console(在API 访问部分)是否添加了正确的指纹和包名称对作为described in the guide

【讨论】:

    【解决方案2】:

    在没有可用 Google Play API 的设备上运行时,通常会出现该错误消息。您调用isGooglePlayServicesAvailable(),但您没有检查返回值。在继续之前,您应该检查以确保它返回 ConnectionResult.SUCCESS。对于其他一些错误代码,您可以通过getErrorDialog() 提示它们升级/安装,例如--

    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    switch (resultCode) {
       case ConnectionResult.SUCCESS: // proceed
          break;
        case ConnectionResult.SERVICE_MISSING:
        case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:
        case ConnectionResult.SERVICE_DISABLED:
              Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, this, 1);
              dialog.show();
     }
    

    根据 Google 的说法,Google Play 服务 API 需要“物理开发设备”,因此模拟器并未正式支持它们。因此,如果您在模拟器上运行,几乎可以肯定您缺少所需的服务。人们报告说让它在模拟器中工作,但我自己没有尝试过。如果您想在模拟器上安装 Google Play,可以查看this post 中的答案。

    【讨论】:

    • 我正在真实设备中运行测试并获得成功。 logcat 中的错误是:Could not find class 'maps.j.k', referenced from method maps.y.ae.a
    • 好的。您是否安装并更新了Google Maps?查看日志跟踪的开头,看看是否看到类似E/Google Maps Android API(14657): Google Maps application is missing.
    • 请参阅this answer,了解如何在您的应用中以编程方式进行检查。
    • 好像都安装好了,这是我在片段标签postimage.org/image/y21oak6jf得到的
    • 好吧,我唯一的其他建议是检查以确保您在 Google API 控制台中正确添加了调试和发布密钥,并且您启用了 Google Maps Android v2,而不仅仅是 Google Maps v2
    【解决方案3】:

    经过一番研究,我发现我忘记从开发者控制台启用地图 APi,如下图所示:-

    我希望你可能有同样的问题,它会有所帮助:-

    【讨论】:

      【解决方案4】:

      如果您在布局 xml 中使用“class="com.google.android.gms.maps.SupportMapFragment",则您现在在 manifest.xml 中使用 Android 3.0 或更低版本的 android:minSdkVersion。

      然后在下面查看我的链接站点,这有助于您了解在您的设备上运行 Google 地图之前应该安装和设置的内容。此链接非常简单,您将获得在您的设备上显示谷歌地图所需的操作。

      My linked site ===> just Click here

      【讨论】:

      • 我下载了您的示例并遇到了同样的问题。我在 2 个不同的设备上运行该项目,结果相同。抱歉语言不好,谢谢您的回答
      • 您是否尝试在 Manifest.xml 的 中输入您的 API 密钥?
      【解决方案5】:

      也许您的 Eclipse 的 SHA1 密钥已更改(例如:您可能删除了 Windows 主文件夹中的 .android 文件夹),因此这就是身份验证错误的原因。您必须删除您的密钥并使用 Eclipse 的新 SHA1 创建新密钥。

      在此处重新生成新密钥并在几分钟后重新加载此页面,它将更新新密钥: https://console.developers.google.com/project/watchful-net-796/apiui/credential

      记住!毕竟,您必须复制新密钥来显示和重建您的项目。祝你好运!

      【讨论】:

        【解决方案6】:

        您缺少 api 密钥

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

        在值参数中输入 api_key

        而且google playService 版本也不见了。添加

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

        manifest&lt;application标签

        【讨论】:

          猜你喜欢
          • 2018-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多