-1

ユーザーの現在の場所を見つけるためのコードがあります.Android 1.6でコードを実行していたときに出力が得られました.しかし、Android 2.3で実行していたときにエラーのみが発生しました.コードの問題は何ですか.

ログキャット:

08-15 23:03:39.612: E/AndroidRuntime(403): FATAL EXCEPTION: main
08-15 23:03:39.612: E/AndroidRuntime(403): java.lang.NullPointerException
08-15 23:03:39.612: E/AndroidRuntime(403):  at com.android.locationspeecher.MyPositionOverlay.draw(MyPositionOverlay.java:25)
08-15 23:03:39.612: E/AndroidRuntime(403):  at com.google.android.maps.Overlay.draw(Overlay.java:179)
08-15 23:03:39.612: E/AndroidRuntime(403):  at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:45)
08-15 23:03:39.612: E/AndroidRuntime(403):  at com.google.android.maps.MapView.onDraw(MapView.java:530)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.View.draw(View.java:6880)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.View.draw(View.java:6883)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.widget.FrameLayout.draw(FrameLayout.java:357)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.View.draw(View.java:6883)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.widget.FrameLayout.draw(FrameLayout.java:357)
08-15 23:03:39.612: E/AndroidRuntime(403):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewRoot.draw(ViewRoot.java:1522)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.os.Looper.loop(Looper.java:130)
08-15 23:03:39.612: E/AndroidRuntime(403):  at android.app.ActivityThread.main(ActivityThread.java:3683)
08-15 23:03:39.612: E/AndroidRuntime(403):  at java.lang.reflect.Method.invokeNative(Native Method)
08-15 23:03:39.612: E/AndroidRuntime(403):  at java.lang.reflect.Method.invoke(Method.java:507)
08-15 23:03:39.612: E/AndroidRuntime(403):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-15 23:03:39.612: E/AndroidRuntime(403):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-15 23:03:39.612: E/AndroidRuntime(403):  at dalvik.system.NativeStart.main(Native Method)

ここに私の MyPositionOverlay コード:

public class MyPositionOverlay extends Overlay {

    Location location;
    private final int mRadius=5;

    @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;
             geoPoint=new GeoPoint(latitude.intValue(),longitude.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, 255, 255);
             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);

             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;
    }


public Location getLocation(){

    return location;

}
public void setLocation(Location location){
    this.location=location;
}


}
4

1 に答える 1

1

nullポインタ例外があります。描画しようとしているものがnullのようです。ドローアブルは特定の解像度フォルダにありますか?drawable-ldpiのように。

その場合、2.3エミュレーターは異なる解像度プロファイル(おそらくmdpi)を持ち、そのドローアブルがnullになる可能性があります。

とにかく、あなたはそのコード行に行き、何がヌルであるかを見つけ、そしてその理由を見つける必要があります。

于 2012-08-15T17:42:00.553 に答える