java - 每当我调用 getMap() 时,我都会收到 nullPointerException

标签 java android google-maps nullpointerexception

无论我做什么,我的代码似乎都会在 getMap() 处崩溃。我几乎在所有地方都尝试过调整我的代码。我以前创建过这个应用程序,但由于计算机崩溃,我不得不重建。我的一些代码。现在它崩溃了。 我的主要代码:

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;


public class FishFishSpotActivity extends Activity{

    public static final String XCORD = "xcord";
public static final String YCORD = "ycord";
public static final String NOTE = "note";
public static final String SAVED = "saved";
public static final String ID = "id";
TextView XCord= null;
TextView YCord= null;
TextView Note= null;
int Id = 0;
Boolean Saved = null;
private GoogleMap map;

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

    initializeMap();

    }

    protected void onStart(){
        map.isMyLocationEnabled();


    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    public boolean onCreateOptionsMenu(Menu menu){

        return false;

    }

    public void onMapClick(LatLng point){
        map.addMarker(new MarkerOptions().position(point));
    }

    public void onMarkerClick(Marker marker){

    }

    public static void SpotSaved(boolean saved, String A){

    }

    private void initializeMap() 
    {
        if (map == null) {
            map = ((MapFragment) getFragmentManager().findFragmentById(
                    R.id.map)).getMap();

            // check if map is created successfully or not
            if (map == null) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }   

}

这是我的manafist:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.Nick.fishfishspot"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="19" />


<permission 
    android:name="com.Nick.fishfishspot.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>

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

 <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" >

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="key is here"/>
   <meta-data
       android:name="com.google.android.gms.version"
       android:value="@integer/google_play_services_version" />

        <activity
            android:name="com.Nick.fishfishspot.FishFishSpotActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这是 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="com.Nick.fishfishspot.FishFishSpotActivity$PlaceholderFragment" >

<fragment 
      android:id="@+id/map"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      class="com.google.android.gms.maps.MapFragment"/>

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="go" />

<EditText
    android:id="@+id/x_cord"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:ems="10" >

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/y_cord"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/x_cord"
    android:layout_alignBottom="@+id/x_cord"
    android:layout_toLeftOf="@id/button1"
    android:layout_toRightOf="@+id/x_cord"
    android:ems="10" />

这是错误:

 05-05 22:44:53.390: E/AndroidRuntime(24604): FATAL EXCEPTION: main
    05-05 22:44:53.390: E/AndroidRuntime(24604): java.lang.RuntimeException: Unable to start activity         ComponentInfo{com.Nick.fishfishspot/com.Nick.fishfishspot.FishFishSpotActivity}:java.lang.NullPointerException
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2304)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at android.app.ActivityThread.access$700(ActivityThread.java:165)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at android.os.Handler.dispatchMessage(Handler.java:99)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at android.os.Looper.loop(Looper.java:137)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at android.app.ActivityThread.main(ActivityThread.java:5450)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at java.lang.reflect.Method.invokeNative(Native Method)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at java.lang.reflect.Method.invoke(Method.java:525)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
   05-05 22:44:53.390: E/AndroidRuntime(24604):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
    05-05 22:44:53.390: E/AndroidRuntime(24604):    at dalvik.system.NativeStart.main(Native Method)
    05-05 22:44:53.390: E/AndroidRuntime(24604): Caused by: java.lang.NullPointerException
    05-05 22:44:53.390: E/AndroidRuntime(24604):    at com.Nick.fishfishspot.FishFishSpotActivity.initializeMap(FishFishSpotActivity.java:76)
    05-05 22:44:53.390: E/AndroidRuntime(24604):    at com.Nick.fishfishspot.FishFishSpotActivity.onCreate(FishFishSpotActivity.java:38)
    05-05 22:44:53.390: E/AndroidRuntime(24604):    at android.app.Activity.performCreate(Activity.java:5369)
    05-05 22:44:53.390: E/AndroidRuntime(24604):    at    android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
    05-05 22:44:53.390: E/AndroidRuntime(24604):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
    05-05 22:44:53.390: E/AndroidRuntime(24604):    ... 11 more

最佳答案

你不见了

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

在 list 的应用标签中

getMap() 可以返回 null。您可以在初始化 GoogleMap 对象之前检查 google play 服务的可用性

A GoogleMap can only be acquired using getMap() when the underlying maps system is loaded and the underlying view in the fragment exists. This class automatically initializes the maps system and the view; however you cannot be guaranteed when it will be ready because this depends on the availability of the Google Play services APK. If a GoogleMap is not available, getMap() will return null.

此外,tools:context="com.Nick.fishfishspot.FishFishSpotActivity$PlaceholderFragment" 提示您在 Activity 中初始化您的 MapFragment 属于 fragment 。

如果您想在 fragment 中放置 map ,则需要扩展 MapFragment 或在 fragment 布局中使用 MapView

Android - android.view.InflateException: Binary XML file line #8: Error inflating class fragment

关于java - 每当我调用 getMap() 时,我都会收到 nullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485662/

相关文章:

java - 调用 finishAffinity() 不会破坏 android 应用程序或 Activity 。即使重新启动应用程序, Activity 的数据仍然存在

jquery - 将类从 Mootools 转换为 jQuery 或经典 javascript

javascript - 谷歌地图 API v3 : is there any function to check if a coordinate is inside a province or country

javascript - 为谷歌地图预加载标记图像

java - 如何创建一个 zip 文件并下载它?

java - 如何将具有所有依赖项的 Netbeans maven 项目移动到其他计算机

android - Eclipse/adb 经常与我的设备断开连接

javascript - 在封闭的 react native 应用程序(Android)中处理静默推送通知?

java - 将数据库表的一列存储到 ArrayList 中

java - 使用 SimpleXML 反序列化