0

我对 Android 编程真的很陌生,我正在尝试在互联网上关注一些关于如何在 android 上制作谷歌地图驾驶方向的教程。但不知何故,代码不起作用,尽管我的 eclipse 没有在代码上显示任何错误。如果此代码有问题,任何人都可以提供帮助?

这是我的 MapDirectionActivity

    package my.map.direction;


    import java.net.HttpURLConnection;
    //import java.net.URI;
    import java.net.URL;

    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;

    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;

    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 android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;

    public class MapDirectionActivity extends MapActivity {


        MapView myMapView = null;
        MapController myMc = null;
        GeoPoint geoPoint = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            myMapView = (MapView) findViewById(R.id.mapView);
            geoPoint = null;
            myMapView.setSatellite(false);

            String htw = "-6.3039,106.8267";
            String storkower = "-6.29436,106.8859";
            String pairs[] = getDirectionData(htw, storkower);
            String[] lngLat = pairs[0].split(",");

            //starting point
            GeoPoint startGP = new GeoPoint((int) (Double.parseDouble(lngLat[1])*1E6), (int)(Double.parseDouble(lngLat[0])*1E6));

            myMc = myMapView.getController();
            geoPoint = startGP;
            myMc.setCenter(geoPoint);
            myMc.setZoom(14);
            myMapView.getOverlays().add(new DirectionPathOverlay(startGP, startGP));

            GeoPoint gp1;
            GeoPoint gp2 = startGP;

            for(int i = 1; i<pairs.length;i++){
                lngLat = pairs[i].split(",");
                gp1 = gp2;

                gp2 = new GeoPoint((int)(Double.parseDouble(lngLat[1])*1E6), (int)(Double.parseDouble(lngLat[0])*1E6));
                myMapView.getOverlays().add(new DirectionPathOverlay(gp1,gp2));
                Log.d("xxx","pair"+pairs[i]);
            }

            myMapView.getOverlays().add(new DirectionPathOverlay(gp2, gp2));
            myMapView.getController().animateTo(startGP);
            myMapView.setBuiltInZoomControls(true);
            myMapView.displayZoomControls(true);

        }

        @Override
        protected boolean isRouteDisplayed(){
            return false;
        }


        private String[] getDirectionData(String srcPlace, String destPlace){
            String urlString = "http://maps.google.com/maps?f=d&hl=en&saddr="
                    + srcPlace + "&daddr=" + destPlace
                    + "&ie=UTF8&0&om=0&output=kml";

        Log.d("URL",urlString); 

        Document doc = null;
        HttpURLConnection urlConnection = null;
        URL url = null;
        String pathContent = "";

        try{
            url = new URL(urlString.toString());
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
            urlConnection.connect();
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            doc = db.parse(urlConnection.getInputStream());     
        }catch(Exception e){

        }

        NodeList nl = doc.getElementsByTagName("LineString");
        for(int s=0; s< nl.getLength();s++){
            Node rootNode = nl.item(s);
            NodeList configItems = rootNode.getChildNodes();
            for(int x=0;x<configItems.getLength();x++){
                Node lineStringNode = configItems.item(x);
                NodeList path = lineStringNode.getChildNodes();
                pathContent = path.item(0).getNodeValue();
            }
        }

        String[] tempContent = pathContent.split(" ");
        return tempContent;
        }

    }

我的 DirectionPathOverlay

public class DirectionPathOverlay extends Overlay{

    private GeoPoint gp1;
    private GeoPoint gp2;

    public DirectionPathOverlay(GeoPoint gp1, GeoPoint gp2){
        this.gp1 = gp1;
        this.gp2 = gp2;

    }

    @Override
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when){

        Projection projection = mapView.getProjection();
        if(shadow == false){
            Paint paint = new Paint();
            paint.setAntiAlias(true);
            Point point = new Point();
            projection.toPixels(gp1, point);
            paint.setColor(Color.BLUE);
            Point point2 = new Point();
            projection.toPixels(gp2, point2);
            paint.setStrokeWidth(3);
            canvas.drawLine((float) point.x, (float) point.y, (float) point2.x, (float) point2.y, paint);
        }
    return super.draw(canvas, mapView, shadow, when);
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow){

        super.draw(canvas, mapView, shadow);
    }
}

我在我的 logcat 上收到以下错误

05-02 08:51:09.972: I/dalvikvm(629): threadid=3: reacting to signal 3
05-02 08:51:09.982: I/dalvikvm(629): Wrote stack traces to '/data/anr/traces.txt'
05-02 08:51:10.062: D/URL(629): http://maps.google.com/maps?f=d&hl=en&saddr=52.458402,13.526616&daddr=52.523559,13.475826&ie=UTF8&0&om=0&output=kml
05-02 08:51:10.082: D/AndroidRuntime(629): Shutting down VM
05-02 08:51:10.102: W/dalvikvm(629): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
05-02 08:51:10.122: E/AndroidRuntime(629): FATAL EXCEPTION: main
05-02 08:51:10.122: E/AndroidRuntime(629): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.google.maps/my.google.maps.MapsTestActivity}: java.lang.NullPointerException
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.os.Looper.loop(Looper.java:137)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.app.ActivityThread.main(ActivityThread.java:4424)
05-02 08:51:10.122: E/AndroidRuntime(629):  at java.lang.reflect.Method.invokeNative(Native Method)
05-02 08:51:10.122: E/AndroidRuntime(629):  at java.lang.reflect.Method.invoke(Method.java:511)
05-02 08:51:10.122: E/AndroidRuntime(629):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-02 08:51:10.122: E/AndroidRuntime(629):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-02 08:51:10.122: E/AndroidRuntime(629):  at dalvik.system.NativeStart.main(Native Method)
05-02 08:51:10.122: E/AndroidRuntime(629): Caused by: java.lang.NullPointerException
05-02 08:51:10.122: E/AndroidRuntime(629):  at my.google.maps.MapsTestActivity.getDirectionData(MapsTestActivity.java:100)
05-02 08:51:10.122: E/AndroidRuntime(629):  at my.google.maps.MapsTestActivity.onCreate(MapsTestActivity.java:38)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.app.Activity.performCreate(Activity.java:4465)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-02 08:51:10.122: E/AndroidRuntime(629):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-02 08:51:10.122: E/AndroidRuntime(629):  ... 11 more
05-02 08:51:10.152: D/dalvikvm(629): GC_CONCURRENT freed 206K, 5% free 5848K/6151K, paused 5ms+4ms
05-02 08:51:10.172: W/CursorWrapperInner(629): Cursor finalized without prior close()
05-02 08:51:10.172: W/CursorWrapperInner(629): Cursor finalized without prior close()
05-02 08:51:10.472: I/dalvikvm(629): threadid=3: reacting to signal 3
05-02 08:51:10.482: I/dalvikvm(629): Wrote stack traces to '/data/anr/traces.txt'
05-02 08:51:10.702: I/dalvikvm(629): threadid=3: reacting to signal 3
05-02 08:51:10.702: I/dalvikvm(629): Wrote stack traces to '/data/anr/traces.txt'
05-02 08:51:12.482: I/Process(629): Sending signal. PID: 629 SIG: 9
05-02 09:05:07.352: I/dalvikvm(647): threadid=3: reacting to signal 3
05-02 09:05:07.372: I/dalvikvm(647): Wrote stack traces to '/data/anr/traces.txt'
05-02 09:05:07.802: I/dalvikvm(647): threadid=3: reacting to signal 3
05-02 09:05:07.832: I/dalvikvm(647): Wrote stack traces to '/data/anr/traces.txt'
05-02 09:05:07.942: D/URL(647): http://maps.google.com/maps?f=d&hl=en&saddr=52.458402,13.526616&daddr=52.523559,13.475826&ie=UTF8&0&om=0&output=kml
05-02 09:05:07.972: D/AndroidRuntime(647): Shutting down VM
05-02 09:05:07.972: W/dalvikvm(647): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
05-02 09:05:07.982: E/AndroidRuntime(647): FATAL EXCEPTION: main
05-02 09:05:07.982: E/AndroidRuntime(647): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.google.maps/my.google.maps.MapsTestActivity}: java.lang.NullPointerException
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.os.Looper.loop(Looper.java:137)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.app.ActivityThread.main(ActivityThread.java:4424)
05-02 09:05:07.982: E/AndroidRuntime(647):  at java.lang.reflect.Method.invokeNative(Native Method)
05-02 09:05:07.982: E/AndroidRuntime(647):  at java.lang.reflect.Method.invoke(Method.java:511)
05-02 09:05:07.982: E/AndroidRuntime(647):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-02 09:05:07.982: E/AndroidRuntime(647):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-02 09:05:07.982: E/AndroidRuntime(647):  at dalvik.system.NativeStart.main(Native Method)
05-02 09:05:07.982: E/AndroidRuntime(647): Caused by: java.lang.NullPointerException
05-02 09:05:07.982: E/AndroidRuntime(647):  at my.google.maps.MapsTestActivity.getDirectionData(MapsTestActivity.java:100)
05-02 09:05:07.982: E/AndroidRuntime(647):  at my.google.maps.MapsTestActivity.onCreate(MapsTestActivity.java:38)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.app.Activity.performCreate(Activity.java:4465)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-02 09:05:07.982: E/AndroidRuntime(647):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-02 09:05:07.982: E/AndroidRuntime(647):  ... 11 more
05-02 09:05:08.032: D/dalvikvm(647): GC_CONCURRENT freed 206K, 5% free 5848K/6151K, paused 4ms+7ms
05-02 09:05:08.032: W/CursorWrapperInner(647): Cursor finalized without prior close()
05-02 09:05:08.032: W/CursorWrapperInner(647): Cursor finalized without prior close()
05-02 09:05:08.302: I/dalvikvm(647): threadid=3: reacting to signal 3
05-02 09:05:08.342: I/dalvikvm(647): Wrote stack traces to '/data/anr/traces.txt'
05-02 09:05:08.632: I/dalvikvm(647): threadid=3: reacting to signal 3
05-02 09:05:08.654: I/dalvikvm(647): Wrote stack traces to '/data/anr/traces.txt'

我已经用任何必要的设置检查了我的 main.xml 和 manifest.xml 以运行谷歌地图,并且我已经在我的另一个 mapactivity 程序上测试了 xml 的类似设置并且它工作正常,所以我认为我的 apikey 没有工作

4

1 回答 1

0

如果您查看日志,您会看到:

引起:java.lang.NullPointerException 05-02 09:05:07.982: E/AndroidRuntime(647): at my.google.maps.MapsTestActivity.getDirectionData(MapsTestActivity.java:100)

所以问题是返回 NULL 的函数 getDirectionData。

于 2012-05-03T22:09:45.993 回答