java.lang.NullPointerException谷歌地图Android API V2
我想首先说,我知道这个错误已经被发布了大约2000次,但是在浏览了一页又一页有相同问题的人并尝试了他们所有的修复之后,没有一个有效,所以我决定提出一个新问题。我很抱歉,如果有一个线程与我的具体问题的解决方案,我无法找到它 这样一来,我认为错误在于MainActivity.Java的第41行有一个NullPointerException,因为Google地图是空的,没有初始化 第41行如下:java.lang.NullPointerException谷歌地图Android API V2,android,api,nullpointerexception,maps,Android,Api,Nullpointerexception,Maps,我想首先说,我知道这个错误已经被发布了大约2000次,但是在浏览了一页又一页有相同问题的人并尝试了他们所有的修复之后,没有一个有效,所以我决定提出一个新问题。我很抱歉,如果有一个线程与我的具体问题的解决方案,我无法找到它 这样一来,我认为错误在于MainActivity.Java的第41行有一个NullPointerException,因为Google地图是空的,没有初始化 第41行如下: map = ((SupportMapFragment) getSupportFragmentManager
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapU)).getMap();
如果我删除MainActivity.Java中的所有代码,只留下Android Studio生成的代码,应用程序就会启动良好,并显示谷歌世界地图,因此我认为这与我的API密钥或谷歌Play服务没有更新无关
我试过的一些东西是:
-在第41行从FragmentManager切换到SupportFragmentManager(当我这样做时,我将地图从FragmentMap更改为SupportMapFragment)-向清单文件添加权限后,您可以看到我最终得到的所有内容。 -不同的设备(不适用于三星Galaxy S2或Galaxy S4)
-我原本在minSDK 12,决定改为16只是为了看看它是否会有帮助,什么都没有 注意:当我第一次创建这个项目时,出于某种原因,MainActivity.Java说扩展了ActionBarActivity而不是FragmentActivity,所以我把它改为FragmentActivity,但我在之前和之后都遇到了这个问题 Manifest.XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hasan.maps" >
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="com.google.android.providers.gsf.permission.MAPS_RECIEVE"></uses-permission>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.hasan.maps.MainActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="APIKEY_IS_INSERTED_HERE"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
Logcat
Logcat
01-31 00:08:42.050 14353-14353/com.hasan.maps E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hasan.maps/com.hasan.maps.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
at android.app.ActivityThread.access$700(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4938)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.hasan.maps.MainActivity.onCreate(MainActivity.java:41)
at android.app.Activity.performCreate(Activity.java:5188)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
at android.app.ActivityThread.access$700(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4938)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
Fragment_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"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.hasan.maps.MainActivity$PlaceholderFragment">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mapU"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_below="@+id/stevens" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="City"
android:id="@+id/city"
android:layout_above="@+id/map"
android:layout_toRightOf="@+id/header"
android:onClick="onClick_city" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NJIT"
android:id="@+id/njit"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/city"
android:onClick="onClick_njit" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stevens"
android:id="@+id/stevens"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/njit"
android:onClick="onClick_stevens" />
</RelativeLayout>
提前谢谢 //实际上您已经在布局
Fragment\u Main.xml
但是您正在使用布局activity\u main.xml
确保在activity\u mail.xml中声明了映射片段。
或者在你的电脑里调用地图
PlaceholderFragment
map = ((SupportMapFragment) getSupportFragmentManager()rootView.findFragmentById(R.id.mapU)).getMap();
答复:
经过几个小时的努力,我终于明白了。代码必须移动到Fragment Activity类下。MainActivity.java第41行是什么?对不起,我应该指定map=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapU)).getMap();在Fragment_Main.xml中,我将其命名为mapU,因为我认为命名变量映射和命名片段映射可能有问题。没有它的片段我可以在剪切给定代码时显示映射,但当我尝试显示多个位置时,则会出现此错误
PlaceholderFragment
map = ((SupportMapFragment) getSupportFragmentManager()rootView.findFragmentById(R.id.mapU)).getMap();