调试程序报错空指针。
我是在网上找别人的代码。Mylocation.java
 
  package com.swift.mylocation;
 
import java.io.IOException;
 import java.util.List;
 import java.util.Locale;
 
import android.app.PendingIntent;
 
import android.content.Context;
 import android.content.Intent;
 
import android.location.Address;
 import android.location.Criteria;
 import android.location.Geocoder;
 import android.location.Location;
 import android.location.LocationListener;
 import android.location.LocationManager;
 import android.os.Bundle;
 
 
 
import android.widget.TextView;
 import android.widget.Toast;
 
import com.google.android.maps.GeoPoint;
 import com.google.android.maps.MapActivity;
 import com.google.android.maps.MapController;
 import com.google.android.maps.MapView;
 import com.google.android.maps.Overlay;
 import com.swift.mylocation.R;
 
public class Mylocation extends MapActivity {
 
 MapController mapController;
  List<Overlay> overlays;
  MyPositionOverlay positionOverlay;
  LocationManager locationManager;
  MapView myMapView;
 
 final String PROXIMITY_ALERT = new String(
    "android.intent.action.proximityalert");
 
 @SuppressWarnings("deprecation")
  @Override
  public void onCreate(Bundle icicle) {
   super.onCreate(icicle);
   setContentView(R.layout.main);
 
  myMapView = (MapView) findViewById(R.id.myMapView);
 
  mapController = myMapView.getController();
 
  myMapView.setSatellite(true);
   myMapView.setStreetView(true);
   myMapView.displayZoomControls(false);
 
  mapController.setZoom(17);
 
  positionOverlay = new MyPositionOverlay();
   overlays = myMapView.getOverlays();
   overlays.add(positionOverlay);
 
  Criteria criteria = new Criteria();
   criteria.setAccuracy(Criteria.ACCURACY_FINE);
   criteria.setAltitudeRequired(true);
   criteria.setBearingRequired(false);
   criteria.setCostAllowed(false);
   criteria.setPowerRequirement(Criteria.POWER_LOW);
   locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
 
  String provider = locationManager.getBestProvider(criteria, true);
 
  Location location = locationManager.getLastKnownLocation(provider);
 
  updateWithNewLocation(location);
 
  locationManager.requestLocationUpdates(provider, 2000, 10,
     locationListener);
  
   setProximityAlert();
 
 }
 
 private final LocationListener locationListener = new LocationListener() {
   @Override
   public void onLocationChanged(Location location) {
    updateWithNewLocation(location);
   }
 
  @Override
   public void onProviderDisabled(String provider) {
    updateWithNewLocation(null);
   }
 
  @Override
   public void onProviderEnabled(String provider) {
   }
 
  @Override
   public void onStatusChanged(String provider, int status, Bundle extras) {
   }
  };
 
 
  
 
 void setProximityAlert() {
   
   double lat = 31.620356666666666;
   double lng = 121.38631333333333;
   float radius = 50f;
   long expiration = -1;
 
  Intent intent = new Intent(PROXIMITY_ALERT);
   intent.setAction(PROXIMITY_ALERT);
   PendingIntent proximityIntent = PendingIntent.getBroadcast(this, -1,
     intent, 0);
 
  locationManager.addProximityAlert(lat, lng, radius, expiration,
     proximityIntent);
 
 }
 
 /** Update UI with a new location */
  private void updateWithNewLocation(Location location) {
 
  String latLongString;
   TextView myLocationText;
   myLocationText = (TextView) findViewById(R.id.myLocationText);
   String addressString = "No address found";
   if (location != null) {
 
   positionOverlay.setLocation(location);
 
   Double geoLat = location.getLatitude() * 1E6;
    Double geoLng = location.getLongitude() * 1E6;
    GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());
    mapController.animateTo(point);
 
   double lat = location.getLatitude();
    double lng = location.getLongitude();
    latLongString = "Lat:" + lat + "\nLong:" + lng;
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
 
   Geocoder gc = new Geocoder(this, Locale.CHINA);
    try {
     List<Address> addresses = gc.getFromLocation(latitude,
       longitude, 1);
     StringBuilder sb = new StringBuilder();
     if (addresses.size() > 0) {
      Address address = addresses.get(0);
      for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
       sb.append(address.getAddressLine(i)).append("\n");
      sb.append(address.getCountryName());
      sb.append(address.getLocality()).append("\n");
     }
     addressString = sb.toString();
    } catch (IOException e) {
    }
   } else {
    latLongString = "No location found";
   }
   myLocationText.setText("Your Current Position is:\n" + latLongString
     + "\n" + addressString);
   
   Toast.makeText(this,this.getIntent().getStringExtra(PROXIMITY_ALERT) , Toast.LENGTH_LONG);
  }
 
 @Override
  protected boolean isRouteDisplayed() {
   return true;
  }
 }
  
 
MyPostionOverlay.java
 
 
 package com.swift.mylocation;
 
import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Point;
 import android.graphics.RectF;
 import android.location.Location;
 
import com.google.android.maps.GeoPoint;
 import com.google.android.maps.MapView;
 import com.google.android.maps.Overlay;
 import com.google.android.maps.Projection;
 
public class MyPositionOverlay extends Overlay {
 
 Location location, mlocation;
  final Double lat = 31.620356666666666 * 1E6,
    lon = 121.38631333333333 * 1E6;
  final int ccc = 50;
  private final int mRadius = 5;
 
 /**
   * @return the location
   */
  public Location getLocation() {
   return location;
  }
 
 /**
   * @param location
   *            the location to set
   */
  public void setLocation(Location location) {
   this.location = location;
  }
 
 @Override
  public void draw(Canvas canvas, MapView mapView, boolean shadow) {
   Projection projection = mapView.getProjection();
   if (shadow == false) {
 
   Double latitude = location.getLatitude() * 1E6;
    Double longitude = location.getLongitude() * 1E6;
    GeoPoint geoPoint, gp;
    geoPoint = new GeoPoint(latitude.intValue(), longitude.intValue());
    gp = new GeoPoint(lat.intValue(), lon.intValue());
 
   Point point = new Point();
    projection.toPixels(geoPoint, point);
    RectF oval = new RectF(point.x - mRadius, point.y - mRadius,
      point.x + mRadius, point.y + mRadius);
 
   Paint paint = new Paint();
    paint.setARGB(250, 255, 0, 0);
    paint.setAntiAlias(true);
    paint.setFakeBoldText(true);
    Paint backPaint = new Paint();
    backPaint.setARGB(175, 50, 50, 50);
    backPaint.setAntiAlias(true);
    RectF backRect = new RectF(point.x + 2 + mRadius, point.y - 3
      * mRadius, point.x + 65, point.y + mRadius);
 
   Point center = new Point();
 
   projection.toPixels(gp, center);
 
   Paint ccp = new Paint();
    ccp.setARGB(250, 0, 0, 255);
    ccp.setAntiAlias(true);
 
   canvas.drawCircle(center.x, center.y, ccc, ccp);
 
   canvas.drawOval(oval, paint);
    canvas.drawRoundRect(backRect, 5, 5, backPaint);
    canvas.drawText("Here I Am", point.x + 2 * mRadius, point.y, paint);
 
  }
   super.draw(canvas, mapView, shadow);
  }
 
 @Override
  public boolean onTap(GeoPoint point, MapView mapView) {
   return false;
  }
 }
 

解决方案 »

  1.   

    ProximityIntentReceiver.java
     
     
     
    package com.swift.mylocation;
     
    import android.content.BroadcastReceiver;
     import android.content.Context;
     import android.content.Intent;
     import android.location.LocationManager;
     import android.util.Log;
     
    public class ProximityIntentReceiver extends BroadcastReceiver {
     
      private final String textin = "alert : in", textout = "alert : out";
     
      @Override
       public void onReceive(Context context, Intent intent) {
        String key = LocationManager.KEY_PROXIMITY_ENTERING;
        Boolean isEnter = intent.getBooleanExtra(key, false);
        if (isEnter) {
         Log.d("allan", textin);
         
         
        } else {
         Log.d("allan", textout);
         
         
         
        }
     
      }
     
     }
     
     
     
     
     
     
     
    main.xml
     
     
     
    <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">
       <TextView  
        android:id="@+id/myLocationText"
         android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
       />
     
    <com.google.android.maps.MapView
      android:id="@+id/myMapView"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:enabled="true"
      android:clickable="true"
      android:apiKey="0zdXWumBW73cogtigVuQ2NgzWpPwNMYmb-hjJ8A"
     />
     </LinearLayout>androidManifest.xml
     
    <?xml version="1.0" encoding="utf-8"?>
     <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.swift.mylocation">
       <application android:icon="@drawable/icon">
        <uses-library android:name="com.google.android.maps"/>
         <activity android:name="com.swift.mylocation.Mylocation" android:label="@string/app_name">
           <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
         </activity>
         
        <receiver android:name="ProximityIntentReceiver">
          <intent-filter>
           <action android:name="android.intent.action.proximityalert" />      
          </intent-filter>
         </receiver>
         
      </application>        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
       <uses-permission android:name="android.permission.INTERNET"/>
       <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
       <uses-sdk android:minSdkVersion="3"/>
     </manifest> 
      

  2.   

    错误信息
    08-23 03:02:37.121: E/AndroidRuntime(943): FATAL EXCEPTION: main
    08-23 03:02:37.121: E/AndroidRuntime(943): java.lang.NullPointerException
    08-23 03:02:37.121: E/AndroidRuntime(943):  at com.swift.mylocation.MyPositionOverlay.draw(MyPositionOverlay.java:42)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at com.google.android.maps.Overlay.draw(Overlay.java:179)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:45)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at com.google.android.maps.MapView.onDraw(MapView.java:530)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.View.draw(View.java:13458)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.View.draw(View.java:13342)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.View.draw(View.java:13340)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.View.draw(View.java:13340)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.View.draw(View.java:13340)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.View.draw(View.java:13461)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.widget.FrameLayout.draw(FrameLayout.java:467)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2183)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2256)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewRootImpl.draw(ViewRootImpl.java:2151)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2019)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1830)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.Choreographer.doCallbacks(Choreographer.java:555)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.Choreographer.doFrame(Choreographer.java:525)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.os.Handler.handleCallback(Handler.java:615)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.os.Handler.dispatchMessage(Handler.java:92)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.os.Looper.loop(Looper.java:137)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at android.app.ActivityThread.main(ActivityThread.java:4745)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at java.lang.reflect.Method.invokeNative(Native Method)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at java.lang.reflect.Method.invoke(Method.java:511)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    08-23 03:02:37.121: E/AndroidRuntime(943):  at dalvik.system.NativeStart.main(Native Method)
      

  3.   

    LogCat中的详细出错提示也要发上来
      

  4.   

    提示是这一句public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    在MyPositionOverlay类里面。
      

  5.   

    Location location = locationManager.getLastKnownLocation(provider);
    此处得到的location的值为空updateWithNewLocation(location);
    这个应该改为if(location !=null )
    {
    updateWithNewLocation(location);
    }
      

  6.   

    08-23 03:02:37.121: E/AndroidRuntime(943): at com.swift.mylocation.MyPositionOverlay.draw(MyPositionOverlay.java:42)
    这行代码粘出来啊