【问题标题】:Trying to get maps v2 Android demo working试图让地图 v2 Android 演示工作
【发布时间】:2013-03-08 19:17:07
【问题描述】:

Android 等新手

所以我被推荐了这个演示: http://dj-android.blogspot.in/2013/02/android-google-map-v2-part-1.html

我跟着它,但一定是出了什么问题。

...

  • 工作区我有自己的项目:
  • 在这个项目中:在“Libs”中,我添加了“android-support-v4.jar”
  • 在这个项目中:在 Android 依赖项中,我有“android-support-v4.jar”
  • 在这个项目中:在参考库中我有“google-play-services.jar”
  • 在这个项目中:在参考库中我有“android-support-v4.jar”

...

  • workspace 我有 google-play-services_lib 作为一个项目:
  • 在这个项目中:在“Libs”中,我有“google-play-services.jar”
  • 在这个项目中:在“Libs”中,我有“google-play-services.jar.properties”
  • 在这个项目中:在“Android Dependencies”中,我有“google-play-services.jar”

...

当我在 SGII v4.1.2 上运行上述项目时,我得到黑屏,然后是 crasj,然后是错误:

03-09 00:28:49.957: E/AndroidRuntime(20309): FATAL EXCEPTION: main
03-09 00:28:49.957: E/AndroidRuntime(20309): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mapstest/com.example.mapstest.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.os.Looper.loop(Looper.java:137)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.ActivityThread.main(ActivityThread.java:4921)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at java.lang.reflect.Method.invokeNative(Native Method)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at java.lang.reflect.Method.invoke(Method.java:511)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at dalvik.system.NativeStart.main(Native Method)
03-09 00:28:49.957: E/AndroidRuntime(20309): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:313)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.Activity.setContentView(Activity.java:1924)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at com.microsystools.mapstest.MainActivity.onCreate(MainActivity.java:17)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.Activity.performCreate(Activity.java:5206)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
03-09 00:28:49.957: E/AndroidRuntime(20309):    ... 11 more
03-09 00:28:49.957: E/AndroidRuntime(20309): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.SupportMapFragment: make sure class name exists, is public, and has an empty constructor that is public
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.support.v4.app.Fragment.instantiate(Fragment.java:401)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.support.v4.app.Fragment.instantiate(Fragment.java:369)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
03-09 00:28:49.957: E/AndroidRuntime(20309):    ... 21 more
03-09 00:28:49.957: E/AndroidRuntime(20309): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.SupportMapFragment
03-09 00:28:49.957: E/AndroidRuntime(20309):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
03-09 00:28:49.957: E/AndroidRuntime(20309):    at android.support.v4.app.Fragment.instantiate(Fragment.java:391)
03-09 00:28:49.957: E/AndroidRuntime(20309):    ... 24 more

activity_main.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"  
   tools:context=".MainActivity" >  
   <fragment  
     android:id="@+id/fragment1"  
     android:layout_width="match_parent"  
     android:layout_height="match_parent"  
     class="com.google.android.gms.maps.SupportMapFragment" />  
 </RelativeLayout>  

MainActivity.Java

package com.example.mapstest;

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

  public class MainActivity extends FragmentActivity {  
       @Override  
       protected void onCreate(Bundle arg0) {  
            // TODO Auto-generated method stub  
            super.onCreate(arg0);  
            setContentView(R.layout.activity_main);  
       }  
  }    

注意 1:

你们认为这可能是与 API 密钥相关的问题吗?我将其用作 API 密钥:

HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH;com.exampledomain.exampleproject
  • 注意结尾。那是对的吗?
  • 我不得不编辑 keytool 的输出,所以不能 100% 确定 API 密钥是好的。看: Maps v2 API Key on Android

注意 2:

我当前配置的一些截图:

如果您认为我的问题的原因是未正确安装 Google Play 服务,我已为此创建了一个单独的 SO:Can not install google-play-services into Eclipse correctly (trying to get maps working)

【问题讨论】:

  • 你能发布整个错误信息吗?通常在您发布的内容下方有一行以“由”开头
  • 特此添加整个日志

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


【解决方案1】:

试试这个:

link

这是我写的关于创建 Google Map API V2 的博文。

更新:

我从我的工作地图项目中拍了一张照片。忽略崩溃报告服务库,如 acra、flurry、bugsense 和 crittercism。除了那些你投射的看起来一样吗?

您的 Android 依赖项 文件夹中有 google-play-services_lib.jar 吗?

【讨论】:

  • 如果你仔细看帖子你会看到:“8.现在创建一个从“FragmentActivity”扩展的Activity,为这个Activity创建一个XML布局文件并将它设置为这个的内容视图活动,在布局中写下以下内容:“因此,对于该类,您需要做的是创建一个扩展 FragmentActivity 的简单活动,并将描述的布局设置为 setContentView (R.layout.maplayout)
  • Tom:从您收到的错误中:“原因:android.support.v4.app.Fragment$InstantiationException:无法实例化片段 com.google.android.gms.maps.SupportMapFragment:确保类名存在,是公共的,并且有一个公共的空构造函数”,显然你在引用 google-play-services 项目时做错了。你确定你正确地遵循了指南的前 4 个步骤吗?
  • 如果你的key不好,mapFragment的膨胀不会有问题。您将看到一个带有缩放控件的空白地图窗口,但您不会收到此错误。这就是我认为您对 google-play-services 项目库做错了什么的原因。您是否将其添加到您的工作空间,然后按照指南中的说明从您的项目中引用它?
  • 现在你明白你的问题是什么了...尝试再次下载最后一个 SDK,然后转到 SDK 管理器并在附加部分下载最新版本的 google-play-services。然后执行从以下位置添加此项目的所有过程:\extras\google\google_play_services\libproject\google-play-services_lib,您可以从其中将 sdk 更新下载到工作区。当您将红色 X 修复为绿色 V 并且 google-play-services_lib.jar 将添加到您的 Android 依赖项时,它应该可以工作。
  • @Tom,我唯一遇到这个问题(红色 X)是当我尝试将地图项目从一台计算机移动到另一台计算机并且 google-play-services_lib 不在同一个计算机中时放置所以我每次移动项目时都必须重新进行引用。但在那之后,红色的 X 又变成了绿色的 V。所以我很抱歉,但我不知道为什么会发生这种情况,我试图用我所知道的来帮助你。
【解决方案2】:

在参考库中我添加了“google-play-services.jar”

这是不正确的。请删除它。然后,将 Play Services Android 库项目导入您的 Eclipse 环境,并将其附加到您的项目中。

引用the documentation:

将 /extras/google/google_play_services/libproject/google-play-services_lib 库项目复制到您维护 Android 应用项目的源代码树中。 如果您使用的是 Eclipse,请将库项目导入您的工作区。点击 File > Import,选择 Android > Existing Android Code into Workspace,然后浏览到库项目的副本以将其导入。

要设置项目以使用 Google Play 服务 SDK... 在您的 Android 项目中引用库项目。请参阅Referencing a Library Project for EclipseReferencing a Library Project on the Command Line,了解有关如何执行此操作的更多信息。

【讨论】:

  • 谢谢。但是,这并没有改变错误:((我有点困惑为什么 google-play-services.jar 已经成为工作空间的一部分,并且不能像支持库那样成为项目的一部分。但是现在我已经尝试过了方式!)
  • @Tom:“我有点困惑,为什么 google-play-services.jar 是工作空间的一部分,而不能像支持库那样成为项目的一部分。” -- 因为它不仅仅是一个 JAR。它是一个 Android 库项目,其中包含 Android 资源。
  • 感谢您的澄清。有道理:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多