0

我的代码工作正常,当我尝试显示地图时,但是当我访问 googlemap 对象时,它会通过空指针异常,所以如何克服它请帮忙

我已按照开发人员网站上的所有说明进行操作,这是我的代码

package com.example.mapdemo;

import java.io.IOException;
import java.util.List;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends FragmentActivity 
{
     GoogleMap googleMap;
     MarkerOptions markerOptions;
     final int RQS_GooglePlayServices = 1;
     TextView tvLocInfo;
     boolean markerClicked;
     Button img_cancl,img_done;
     static final LatLng HAMBURG = new LatLng(53.558, 9.927);
      static final LatLng KIEL = new LatLng(53.551, 9.993);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


              if (resultCode == ConnectionResult.SUCCESS)
            {
                 Toast.makeText(getApplicationContext(), 
                   "isGooglePlayServicesAvailable SUCCESS", 
                   Toast.LENGTH_LONG).show();
                 map.addMarker(new MarkerOptions().position(new LatLng(53.558, 9.927)).title("Marker"));
                 Log.i("testing", "success");
            }
            else
            {
             GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices);
             Log.i("testing", "errorrrrrrrrr");
            }
        }

            }


                @Override
                protected void onResume() {
                 // TODO Auto-generated method stub
                 super.onResume();

                 int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());

                 if (resultCode == ConnectionResult.SUCCESS){
                  Toast.makeText(getApplicationContext(), 
                    "isGooglePlayServicesAvailable SUCCESS", 
                    Toast.LENGTH_LONG).show();
                 }else{
                  GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices);
                 }

                }

            }

这是我的布局

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tvLocInfo"
        android:layout_width="fill_parent"
        android:layout_height="50dp" />

    <fragment
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="40dp"
        class="com.google.android.gms.maps.SupportMapFragment" />
</RelativeLayout>

<include layout="@layout/lay_button" />

清单文件

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />

<permission
    android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>

<uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE"/>

<uses-permission android:name="android.permission.INTERNET"/>
<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:debuggable="true"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.mapdemo.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="AIzaSyBd0XLtX5eHnpHJ7g2XsQ6sntNjDxuS6i4"/>

</application>

这是logcat

07-24 10:00:29.051:I/测试(2825):errorrrrrrrrr

4

1 回答 1

0

“我的代码工作正常”不,不是!

您正在验证是否在 onResume() 中安装了 GooglePlayServices,但您在 onCreate() 中过早使用了 GoogleMap 对象。将 onCreate 中的代码移至

if (resultCode == ConnectionResult.SUCCESS){ }

健康)状况。GoogleMap 对象在 onCreate 中可以为空,因此异常。

如果您确定 GooglePlayServices 通过了上述条件,您应该只使用 GoogleMap。

于 2013-07-24T09:50:07.557 回答