Java 在Android中,点击一个按钮即可打开谷歌地图!

Java 在Android中,点击一个按钮即可打开谷歌地图!,java,android,xml,google-maps,android-mapview,Java,Android,Xml,Google Maps,Android Mapview,屏幕上有3个按钮!开始,查看地图,停止 当我点击“查看地图”时,它会转到一个显示地图的新屏幕!但是出了点问题,应用程序被强制关闭了!我认为问题在于xml文件。请有人纠正一下 Main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orien

屏幕上有3个按钮!开始,查看地图,停止

当我点击“查看地图”时,它会转到一个显示地图的新屏幕!但是出了点问题,应用程序被强制关闭了!我认为问题在于xml文件。请有人纠正一下

Main.xml

    <?xml version="1.0" encoding="utf-8"?>

    <RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView 
android:layout_width="wrap_content" 
android:id="@+id/widget35" 
android:padding="10dp" 
android:textSize="35sp" 
android:text="Maps" 
android:layout_height="wrap_content" />

    <Button 
android:textSize="30sp" 
android:layout_width="wrap_content" 
android:id="@+id/buttonStart" 
android:text="Start" 
android:layout_height="match_parent" />

    <Button 
android:textSize="30sp" 
android:layout_width="wrap_content" 
android:id="@+id/buttonMap" 
android:text="View Map" 
android:layout_height="wrap_content" />

    <Button 
android:textSize="30sp" 
android:layout_width="wrap_content" 
android:id="@+id/buttonStop" 
android:text="Stop" 
android:layout_height="match_parent" />

    <com.google.android.maps.MapView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:enabled="true"
    android:id="@+id/mymap"
    android:apiKey="xxxxxxxxxxx" />

    <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/myzoom"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    />
    </RelativeLayout>
除了贴图按钮块外,还有用于启动和停止的块,但它们工作正常

MapViewer.java Logcat

06-29 04:34:37.701: WARN/dalvikvm(381): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-29 04:34:37.731: ERROR/AndroidRuntime(381): FATAL EXCEPTION: main
06-29 04:34:37.731: ERROR/AndroidRuntime(381): java.lang.RuntimeException: Unable to start activity ComponentInfo{Firstdroid.Gps/Firstdroid.Gps.MainActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class com.google.android.maps.MapView
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.os.Looper.loop(Looper.java:123)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at java.lang.reflect.Method.invokeNative(Native Method)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at java.lang.reflect.Method.invoke(Method.java:521)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at dalvik.system.NativeStart.main(Native Method)
06-29 04:34:37.731: ERROR/AndroidRuntime(381): Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class com.google.android.maps.MapView
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.Activity.setContentView(Activity.java:1647)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at Firstdroid.Gps.MainActivity.onCreate(MainActivity.java:23)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     ... 11 more
06-29 04:34:37.731: ERROR/AndroidRuntime(381): Caused by: java.lang.ClassNotFoundException: com.google.android.maps.MapView in loader dalvik.system.PathClassLoader[/data/app/Firstdroid.Gps-2.apk]
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.createView(LayoutInflater.java:466)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     ... 20 more
06-29 04:34:37.751: WARN/ActivityManager(58):   Force finishing activity Firstdroid.Gps/.MainActivity
06-29 04:34:38.292: WARN/ActivityManager(58): Activity pause timeout for HistoryRecord{44fb8580 Firstdroid.Gps/.MainActivity}
06-29 04:34:48.824: WARN/ActivityManager(58): Activity destroy timeout for HistoryRecord{44fb8580 Firstdroid.Gps/.MainActivity}

以防仿真器出现错误:您可能没有为您的平台安装“Google API”包和/或将其用作构建目标和/或没有启动Google API仿真器

com.google.android.maps.MapView的CNFE是一个提示



这演示了
MapView
的使用。检查这是否在目标系统中运行(否
ClassNotFoundException
),如果是,则为您自己的应用程序提供模板/模式

您需要为地图视图创建一个单独的layout.xml文件。在res->layout中创建一个名为map.xml的新xml,并在中通过它

注意:MapViewer类应该扩展MapActivity,而不是MainActivity

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
 android:orientation="horizontal"
>

<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:enabled="true"
android:apiKey="your API key goes here" />

</LinearLayout> 

我不是100%确定这是否是问题所在,但我认为你把每件事都夸大了两次。为什么MapViewer扩展了MainActivity而不是Activity,为什么没有两个XML文件,一个用于主活动,另一个用于MapViewer

调用MapViewer的onCreate()方法时,首先进行超级调用。 这意味着您通过同一个资源文件有效地调用了两次
setContentView()
,因为您是从MainActivity调用setContentView的。我可能错了,但我认为,当您在按下按钮之前创建第一个MainActivity时,您正在创建MapView,然后将其父级设置为MainActivity。创建MapViewer活动时,您将尝试重新展开视图,而无需将其从父活动中删除并重新出租


即使我刚才说的一切都是完全错误的,但让两个活动共享一个布局文件也是很糟糕的。如果两个活动的布局完全相同,那么它们应该是一个活动开始,您应该重新考虑您的方法。

我认为您错过了以下代码:

 <uses-library android:name="com.google.android.maps" />


在您的android清单中。

非常感谢!就是这样!我现在有2个xml文件。。main.xml和map.xml,但现在当我单击view map按钮时,应用程序将强制关闭!06-29 22:53:00.966:ERROR/AndroidRuntime(8365):致命异常:main 06-29 22:53:00.966:ERROR/AndroidRuntime(8365):java.lang.NoClassDefFoundError:Firstdroid.Gps.MapViewer 06-29 22:53:00.966:ERROR/AndroidRuntime(8365):在Firstdroid.Gps.MainActivity$2.onClick(MainActivity.java:48)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。06-29 22:53:00.986:WARN/ActivityManager(96):强制完成活动Firstdroid.Gps/.MainActivityYes!我单独运行它,它工作了。当我尝试将它引入我的应用程序时,我不知道…出现了问题!!对我已经创建了另一个xml文件,现在布局很好。但是当我点击查看地图按钮时,我得到了这个错误,06:33:07.024:WARN/dalvikvm(300):无法解析LFirstdroid/Gps/MapViewer的超类;(37)06-30 06:33:07.035:WARN/dalvikvm(300):类“LFirstdroid/Gps/MapViewer”的链接失败06-30 06:33:07.045:错误/dalvikvm(300):找不到从方法Firstdroid.Gps.MainActivity$2引用的类“Firstdroid.Gps.MapViewer”。单击06-30 06:33:07.045:警告/dalvikvm(300):VFY:无法解析LFirstdroid/Gps/MainActivity$2中的常量类8(LFirstdroid/Gps/MapViewer;);听起来您在更改MapViewer子类的方式后没有重写导入。
06-29 04:34:37.701: WARN/dalvikvm(381): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-29 04:34:37.731: ERROR/AndroidRuntime(381): FATAL EXCEPTION: main
06-29 04:34:37.731: ERROR/AndroidRuntime(381): java.lang.RuntimeException: Unable to start activity ComponentInfo{Firstdroid.Gps/Firstdroid.Gps.MainActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class com.google.android.maps.MapView
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.os.Looper.loop(Looper.java:123)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at java.lang.reflect.Method.invokeNative(Native Method)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at java.lang.reflect.Method.invoke(Method.java:521)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at dalvik.system.NativeStart.main(Native Method)
06-29 04:34:37.731: ERROR/AndroidRuntime(381): Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class com.google.android.maps.MapView
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.Activity.setContentView(Activity.java:1647)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at Firstdroid.Gps.MainActivity.onCreate(MainActivity.java:23)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     ... 11 more
06-29 04:34:37.731: ERROR/AndroidRuntime(381): Caused by: java.lang.ClassNotFoundException: com.google.android.maps.MapView in loader dalvik.system.PathClassLoader[/data/app/Firstdroid.Gps-2.apk]
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.createView(LayoutInflater.java:466)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
06-29 04:34:37.731: ERROR/AndroidRuntime(381):     ... 20 more
06-29 04:34:37.751: WARN/ActivityManager(58):   Force finishing activity Firstdroid.Gps/.MainActivity
06-29 04:34:38.292: WARN/ActivityManager(58): Activity pause timeout for HistoryRecord{44fb8580 Firstdroid.Gps/.MainActivity}
06-29 04:34:48.824: WARN/ActivityManager(58): Activity destroy timeout for HistoryRecord{44fb8580 Firstdroid.Gps/.MainActivity}
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
 android:orientation="horizontal"
>

<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:enabled="true"
android:apiKey="your API key goes here" />

</LinearLayout> 
setContentView(R.layout.map);
 <uses-library android:name="com.google.android.maps" />