无法在Android中使用地图叠加层。继续获取null异常

时间:2012-02-03 21:50:01

标签: java android google-maps

我已经尝试了每个可以谷歌的例子,我可以在stackoverflow和其他网站上找到的每个解决方案..但是我只是无法开始工作..

现在我使用来自androids自己网站的示例,我在其中创建一个单独的类。这是我的代码:

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

    MapView map = (MapView) findViewById(R.id.googlemap) ;
    map.setBuiltInZoomControls(true);
    mapController = map.getController() ;
    mapController.setZoom(12);

    int lat = (int)(Double.parseDouble(GlobalClass.pass_lattitude) * 1000000) ;
    int lon = (int)( Double.parseDouble(GlobalClass.pass_longitude) * 1000000);
    GeoPoint point = new GeoPoint(lat,lon) ;
    p = point ;
    mapController.animateTo(point) ;
    //---Add a location marker---

    List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.pushpin);
    Mapoverlays itemizedoverlay = new Mapoverlays(drawable);


    OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");

    itemizedoverlay.addOverlay(overlayitem);
    mapOverlays.add(itemizedoverlay);

通过使用Log.d,我可以找到给出零点错误的崩溃点,即: 列表mapOverlays = mapView.getOverlays();

我的API密钥工作正常,因为如果删除6行mapoverlay代码,我可以查看地图。 不知道它是否意味着什么,但是当没有覆盖码时,我会得到这些Logcats。

02-03 22:44:05.892:I / MapActivity(2374):处理网络变更通知:已连接 02-03 22:44:05.892:E / MapActivity(2374):无法获得连接工厂客户端

如果我包含覆盖代码,它崩溃了,我得到了Logcat:     02-03 22:45:33.183:E / AndroidRuntime(2465):致命异常:主要 02-03 22:45:33.183:E / AndroidRuntime(2465):java.lang.RuntimeException:无法启动活动ComponentInfo {com.closebuy.namespace / com.closebuy.namespace.Show_map}:java.lang.NullPointerException 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125) 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033) 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.os.Handler.dispatchMessage(Handler.java:99) 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.os.Looper.loop(Looper.java:123) 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.app.ActivityThread.main(ActivityThread.java:4627) 02-03 22:45:33.183:E / AndroidRuntime(2465):at java.lang.reflect.Method.invokeNative(Native Method) 02-03 22:45:33.183:E / AndroidRuntime(2465):at java.lang.reflect.Method.invoke(Method.java:521) 02-03 22:45:33.183:E / AndroidRuntime(2465):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 02-03 22:45:33.183:E / AndroidRuntime(2465):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 02-03 22:45:33.183:E / AndroidRuntime(2465):at dalvik.system.NativeStart.main(Native Method) 02-03 22:45:33.183:E / AndroidRuntime(2465):引起:java.lang.NullPointerException 02-03 22:45:33.183:E / AndroidRuntime(2465):at com.closebuy.namespace.Show_map.onCreate(Show_map.java:48) 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 02-03 22:45:33.183:E / AndroidRuntime(2465):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

我已经在模拟器和我的Galaxy S2上尝试过了..请帮助,我真的不想这个工作

2 个答案:

答案 0 :(得分:0)

  

通过使用Log.d我可以找到给出零点错误的崩溃点,即行:List mapOverlays = mapView.getOverlays();

您在哪里声明并初始化变量mapView?我看到的唯一MapView类型变量是map

MapView map = (MapView) findViewById(R.id.googlemap) ;

所以,我会尝试:

List<Overlay> mapOverlays = map.getOverlays();

如果仍然因空指针错误而崩溃,那么您在win_showmap.xml布局中没有声明MapView视图。

答案 1 :(得分:0)

我知道此示例的文档中存在错误。从内存中我认为构造函数是完全错误的。我认为它需要

public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
        // super(defaultMarker); <<<< REPLACE THIS WITH THE LINE BELOW
        super(boundCenterBottom(defaultMarker));
        mContext = context;
    }