如何添加覆盖映射在Android? [英] How can add overlay to map on android?

查看:145
本文介绍了如何添加覆盖映射在Android?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图应用这些codeS就是在这个链接。但我发现了错误,如NullPointerException异常。

我用不成,这里是我的功能就是在我BaseFragment

 公共无效createMapViewForHaritaFragment(IlanList名单)
{
    IlanList gelenListe;
    gelenListe =清单;    如果(gelenListe!= NULL)
    {
        MainActivity父= getParentActivity();
        mMapViewContainer = parent.getmMapViewContainer();
        mMapView = parent.getmMapView();        / ** /
            MC = mMapView.getController();            LM的LocationManager =(的LocationManager)parent.getSystemService(parent.getApplicationContext()LOCATION_SERVICE);
            地点= lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            。串经度=将String.valueOf(location.getLongitude())子(0,9);
            串纬度=将String.valueOf(location.getLatitude())子(0,9)。
            字符串的坐标[] = {纬度,经度};
            双纬度= Double.parseDouble(坐标[0]);
            双经度= Double.parseDouble(坐标[1]);            P =新的GeoPoint(
                (INT)(LAT * 1E6)
                (INT)(LNG * 1E6));            mc.animateTo(P);
            mMapView.setBuiltInZoomControls(真);            mMapView.setSatellite(假);
            mc.setZoom(16);
            / *地图
            公共查看mMapViewContainer;
            公共图形页面mMapView;
            公共MapController MC;
            公众的GeoPoint磷;            公开名单<&叠加GT; mapOverlays;
            公众可绘制可绘制;
            公共MapItemizedOverlay itemizedOverlay;
            HARITA * /            绘制= this.getResources()getDrawable(R.drawable.map_kirmizi_png)。
            itemizedOverlay =新MapItemizedOverlay(绘制,parent.getApplicationContext(),30); //文字大小:30            GeoPoint的gPointMe =新的GeoPoint(41099932,29002657);
            OverlayItem overlayItem =新OverlayItem(gPointMe,我,这是我的位置);
            itemizedOverlay.addOverlay(overlayItem);            mapOverlays.add(itemizedOverlay);            mMapView.setBuiltInZoomControls(真);            //移动地图上,我的立场
            mc.animateTo(gPointMe);        mMapView.invalidate();
    }}

我想,我得到的错误处理此code:

 保护OverlayItem createItem中(int i)以
{
    返回mOverlays.get(ⅰ);
}

这是我的LogCat中。

  12月12日至21日:35:53.443:E / AndroidRuntime(19782):致命异常:主要
12月12日至21日:35:53.443:E / AndroidRuntime(19782):显示java.lang.NullPointerException
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在com.mert.fragment.BaseFragment.createMapViewForHaritaFragment(BaseFragment.java:274)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在com.mert.fragment.impl.EtrafimdaHaritaFragment$MyHandler.handleMessage(EtrafimdaHaritaFragment.java:154)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在android.os.Handler.dispatchMessage(Handler.java:99)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在android.os.Looper.loop(Looper.java:143)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在android.app.ActivityThread.main(ActivityThread.java:4277)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在java.lang.reflect.Method.invokeNative(本机方法)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在java.lang.reflect.Method.invoke(Method.java:507)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在dalvik.system.NativeStart.main(本机方法)

感谢您的帮助。


解决方案

  AddItemized覆盖类:        公共类AddItemizedOverlay扩展ItemizedOverlay< OverlayItem> {            私人的ArrayList< OverlayItem> mapOverlays =新的ArrayList< OverlayItem>();            私人上下文的背景下;            公共AddItemizedOverlay(可绘制defaultMarker){
                 超(boundCenterBottom(defaultMarker));
            }            公共AddItemizedOverlay(可绘制defaultMarker,上下文的背景下){
                 这个(defaultMarker);
                 this.context =背景;
            }            @覆盖
            保护OverlayItem createItem中(int i)以{
               返回mapOverlays.get(ⅰ);
            }            @覆盖
            公众诠释大小(){
               返回mapOverlays.size();
            }            @覆盖
            保护布尔中的onTap(INT指数){
               Log.e(点击,点击演出);
               返回true;
            }            公共无效addOverlay(OverlayItem叠加){
               mapOverlays.add(覆盖);
                this.populate();
            }         }
    使用此code在你的活动
      清单<&叠加GT; mapOverlays = mv.getOverlays();
            可绘制可绘制= this.getResources()getDrawable(R.drawable.drawable)。
            AddItemizedOverlay itemizedOverlay =
            新AddItemizedOverlay(绘制,这一点);
            OverlayItem overlayitem =新OverlayItem(GP,你好,我在这里);
            itemizedOverlay.addOverlay(overlayitem);
            mapOverlays.add(itemizedOverlay);
 公共无效createMapViewForHaritaFragment(IlanList名单)
{
    IlanList gelenListe;
    gelenListe =清单;    如果(gelenListe!= NULL)
    {
        MainActivity父= getParentActivity();
        mMapViewContainer = parent.getmMapViewContainer();
        mMapView = parent.getmMapView();        / ** /
            MC = mMapView.getController();            LM的LocationManager =(的LocationManager)parent.getSystemService(parent.getApplicationContext()LOCATION_SERVICE);
            地点= lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            。串经度=将String.valueOf(location.getLongitude())子(0,9);
            串纬度=将String.valueOf(location.getLatitude())子(0,9)。
            字符串的坐标[] = {纬度,经度};
            双纬度= Double.parseDouble(坐标[0]);
            双经度= Double.parseDouble(坐标[1]);            P =新的GeoPoint(
                (INT)(LAT * 1E6)
                (INT)(LNG * 1E6));        MC = mMapView.getController();
        mc.setCenter(P);
        mc.setZoom(16);        清单<&叠加GT; mapOverlays = mv.getOverlays();
        可绘制可绘制= this.getResources()getDrawable(R.drawable.pin)。
        AddItemizedOverlay itemizedOverlay =新AddItemizedOverlay(绘制,
                这个);
        OverlayItem overlayitem =新OverlayItem(P,你好,我在这里);
        itemizedOverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedOverlay);           / * mc.animateTo(对);
            mMapView.setBuiltInZoomControls(真);           mMapView.setSatellite(假);
           mc.setZoom(16); * /
            / *地图
            公共查看mMapViewContainer;
            公共图形页面mMapView;
            公共MapController MC;
            公众的GeoPoint磷;            公开名单<&叠加GT; mapOverlays;
            公众可绘制可绘制;
            公共MapItemizedOverlay itemizedOverlay;
            HARITA * /          / *绘制= this.getResources()getDrawable(R.drawable.map_kirmizi_png)。
            itemizedOverlay =新MapItemizedOverlay(绘制,parent.getApplicationContext(),30); //文字大小:30            GeoPoint的gPointMe =新的GeoPoint(41099932,29002657);
            OverlayItem overlayItem =新OverlayItem(gPointMe,我,这是我的位置);
            itemizedOverlay.addOverlay(overlayItem);            mapOverlays.add(itemizedOverlay);            mMapView.setBuiltInZoomControls(真);            //移动地图上,我的立场
            mc.animateTo(gPointMe);        mMapView.invalidate(); * /
    }}

i tried to apply these codes that is in this link. But I'm getting error like NullPointerException.

I use fragmentation and here is my function that is in my BaseFragment

 public void createMapViewForHaritaFragment(IlanList list)
{
    IlanList gelenListe;
    gelenListe=list;

    if(gelenListe!=null)
    {
        MainActivity parent = getParentActivity();
        mMapViewContainer = parent.getmMapViewContainer();
        mMapView = parent.getmMapView();

        /**/
            mc = mMapView.getController();

            LocationManager lm = (LocationManager) parent.getSystemService(parent.getApplicationContext().LOCATION_SERVICE); 
            Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            String longitude = String.valueOf(location.getLongitude()).substring(0, 9);
            String latitude = String.valueOf(location.getLatitude()).substring(0, 9);


            String coordinates[] = {latitude,longitude};
            double lat = Double.parseDouble(coordinates[0]);
            double lng = Double.parseDouble(coordinates[1]);

            p = new GeoPoint(
                (int) (lat * 1E6), 
                (int) (lng * 1E6));

            mc.animateTo(p);
            mMapView.setBuiltInZoomControls(true);      

            mMapView.setSatellite(false);               
            mc.setZoom(16);         




            /*Harita
            public View mMapViewContainer;
            public MapView mMapView;
            public MapController mc;
            public GeoPoint p;

            public List<Overlay> mapOverlays;
            public Drawable drawable;
            public MapItemizedOverlay itemizedOverlay;  
            Harita*/

            drawable = this.getResources().getDrawable(R.drawable.map_kirmizi_png);
            itemizedOverlay = new MapItemizedOverlay(drawable, parent.getApplicationContext(), 30);//text size: 30

            GeoPoint gPointMe = new GeoPoint(41099932,29002657);
            OverlayItem overlayItem = new OverlayItem(gPointMe, "Me", "This is my location");
            itemizedOverlay.addOverlay(overlayItem);    

            mapOverlays.add(itemizedOverlay);

            mMapView.setBuiltInZoomControls(true);

            //move map over to my position
            mc.animateTo(gPointMe);  



        mMapView.invalidate();
    }

}

And I think, I'm getting error while processing this code :

protected OverlayItem createItem(int i)
{
    return mOverlays.get(i);
}

These are my LogCat.

12-21 12:35:53.443: E/AndroidRuntime(19782): FATAL EXCEPTION: main
12-21 12:35:53.443: E/AndroidRuntime(19782): java.lang.NullPointerException
12-21 12:35:53.443: E/AndroidRuntime(19782):    at com.mert.fragment.BaseFragment.createMapViewForHaritaFragment(BaseFragment.java:274)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at com.mert.fragment.impl.EtrafimdaHaritaFragment$MyHandler.handleMessage(EtrafimdaHaritaFragment.java:154)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at android.os.Looper.loop(Looper.java:143)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at android.app.ActivityThread.main(ActivityThread.java:4277)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at java.lang.reflect.Method.invokeNative(Native Method)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at java.lang.reflect.Method.invoke(Method.java:507)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-21 12:35:53.443: E/AndroidRuntime(19782):    at dalvik.system.NativeStart.main(Native Method)

Thanks for your help.

解决方案

        AddItemized Overlay class:

        public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {

            private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();

            private Context context;

            public AddItemizedOverlay(Drawable defaultMarker) {
                 super(boundCenterBottom(defaultMarker));
            }

            public AddItemizedOverlay(Drawable defaultMarker, Context context) {
                 this(defaultMarker);
                 this.context = context;
            }

            @Override
            protected OverlayItem createItem(int i) {
               return mapOverlays.get(i);
            }

            @Override
            public int size() {
               return mapOverlays.size();
            }

            @Override
            protected boolean onTap(int index) {
               Log.e("Tap", "Tap Performed");
               return true;
            }

            public void addOverlay(OverlayItem overlay) {
               mapOverlays.add(overlay);
                this.populate();
            }

         }


    Use this code in your Activity


      List<Overlay> mapOverlays = mv.getOverlays();
            Drawable drawable = this.getResources().getDrawable(R.drawable.drawable);
            AddItemizedOverlay itemizedOverlay =
            new AddItemizedOverlay(drawable, this);
            OverlayItem overlayitem = new OverlayItem(gp, "Hello", "I am here");
            itemizedOverlay.addOverlay(overlayitem);
            mapOverlays.add(itemizedOverlay);


 public void createMapViewForHaritaFragment(IlanList list)
{
    IlanList gelenListe;
    gelenListe=list;

    if(gelenListe!=null)
    {
        MainActivity parent = getParentActivity();
        mMapViewContainer = parent.getmMapViewContainer();
        mMapView = parent.getmMapView();

        /**/
            mc = mMapView.getController();

            LocationManager lm = (LocationManager) parent.getSystemService(parent.getApplicationContext().LOCATION_SERVICE); 
            Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            String longitude = String.valueOf(location.getLongitude()).substring(0, 9);
            String latitude = String.valueOf(location.getLatitude()).substring(0, 9);


            String coordinates[] = {latitude,longitude};
            double lat = Double.parseDouble(coordinates[0]);
            double lng = Double.parseDouble(coordinates[1]);

            p = new GeoPoint(
                (int) (lat * 1E6), 
                (int) (lng * 1E6));

        mc = mMapView.getController();
        mc.setCenter(p);
        mc.setZoom(16);

        List<Overlay> mapOverlays = mv.getOverlays();
        Drawable drawable = this.getResources().getDrawable(R.drawable.pin);
        AddItemizedOverlay itemizedOverlay = new AddItemizedOverlay(drawable,
                this);
        OverlayItem overlayitem = new OverlayItem(p, "Hello", "I AM HERE");
        itemizedOverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedOverlay);

           /* mc.animateTo(p);
            mMapView.setBuiltInZoomControls(true);      

           mMapView.setSatellite(false);               
           mc.setZoom(16);   */      




            /*Harita
            public View mMapViewContainer;
            public MapView mMapView;
            public MapController mc;
            public GeoPoint p;

            public List<Overlay> mapOverlays;
            public Drawable drawable;
            public MapItemizedOverlay itemizedOverlay;  
            Harita*/

          /*  drawable = this.getResources().getDrawable(R.drawable.map_kirmizi_png);
            itemizedOverlay = new MapItemizedOverlay(drawable, parent.getApplicationContext(), 30);//text size: 30

            GeoPoint gPointMe = new GeoPoint(41099932,29002657);
            OverlayItem overlayItem = new OverlayItem(gPointMe, "Me", "This is my location");
            itemizedOverlay.addOverlay(overlayItem);    

            mapOverlays.add(itemizedOverlay);

            mMapView.setBuiltInZoomControls(true);

            //move map over to my position
            mc.animateTo(gPointMe);  



        mMapView.invalidate(); */
    }

}

这篇关于如何添加覆盖映射在Android?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆