单击地图标记时 Android 地图应用程序强制关闭

发布于 2024-09-02 01:36:32 字数 5271 浏览 3 评论 0原文

我正在构建一个谷歌地图应用程序,在地图上标记几个点。我目前正在尝试在单击标记时显示对话框。现在,标记出现在正确的位置,但是当我单击它们时,整个应用程序意外停止/被迫关闭。有人对出了什么问题以及我应该如何解决它有任何建议吗?

MyMapsActivity.java 类:

package net.learn2develop.MyGoogleMapsNew;


import java.util.List;

import android.graphics.drawable.Drawable;
import android.os.Bundle;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class MyMapsActivity extends MapActivity {
    /** Called when the activity is first created. */

 public MyItemOverlay itemoverlay;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        //MapView = new MapView(this, "example_Maps_ApiKey_String");
        mapView.setBuiltInZoomControls(true);

        List<Overlay> mapOverlays = mapView.getOverlays();
        Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
        itemoverlay = new MyItemOverlay(drawable);

        GeoPoint point1 = new GeoPoint(19240000,-99120000);
        OverlayItem overlayitem1 = new OverlayItem(point1, "Hola, Mundo!", "I'm in Mexico City!");

        GeoPoint point2 = new GeoPoint(35410000, 139460000);
        OverlayItem overlayitem2 = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!");

        GeoPoint point3 = new GeoPoint(39000000, -77000000);
        OverlayItem overlayitem3 = new OverlayItem(point3, "","");


        itemoverlay.addOverlay(overlayitem1);
        itemoverlay.addOverlay(overlayitem2);
        itemoverlay.addOverlay(overlayitem3);

        mapOverlays.add(itemoverlay);

    }

    protected boolean isRouteDisplayed() {
        return false;
    }
}

MyItemOverlay 类:

package net.learn2develop.MyGoogleMapsNew;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class MyItemOverlay extends ItemizedOverlay {

 private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
 private Context mContext;

 public MyItemOverlay(Drawable defaultMarker) {
  super(boundCenterBottom(defaultMarker));
  // TODO Auto-generated constructor stub
 }

 public MyItemOverlay(Drawable defaultMarker, Context context) {
    super(defaultMarker);
    mContext = context;
 }
 @Override
 protected boolean onTap(int index) {
   OverlayItem item = mOverlays.get(index);
   AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
   dialog.setTitle(item.getTitle());
   dialog.setMessage(item.getSnippet());
   dialog.show();
   return true;
 }

/* protected boolean onTap(int index) {
        OverlayItem item = mOverlays.get(index);
        AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
        dialog.setTitle(item.getTitle());
        dialog.setMessage(item.getSnippet());
        dialog.setPositiveButton("Yes", new OnClickListener() {    
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        dialog.show();
        return true;
    }
}*/


// @Override
 /*protected OverlayItem createItem(int arg0) {
  // TODO Auto-generated method stub
  return null;
 }*/

 /*@Override
 public int size() {
  // TODO Auto-generated method stub
  return 0;
 }*/

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

 public void addOverlay(OverlayItem overlay) {
     mOverlays.add(overlay);
     populate();
 }
 @Override
 protected OverlayItem createItem(int i) {
   return mOverlays.get(i);
 }


}

AndroidManifest.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="net.learn2develop.MyGoogleMapsNew"
      android:versionCode="1"
      android:versionName="1.0">
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
  <uses-library android:name="com.google.android.maps" />
         <activity android:name=".MyMapsActivity"
                  android:label="@string/app_name">
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
         </activity>


    </application>

    <uses-permission 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:name="android.permission.INTERNET">
    </uses-permission>

    <uses-permission 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:name="android.permission.ACCESS_COARSE_LOCATION">
    </uses-permission>
    <uses-sdk android:minSdkVersion="3" />

</manifest>

I'm building a google map application that marks several points on the map. I'm currently trying to get the dialog box to appear when the marker is clicked. Right now, the markers appear at the right places but when i click them, the entire application stops unexpectedly/forced to close. Does anyone have any suggestions on what is wrong and how i should go about fixing it?

MyMapsActivity.java class:

package net.learn2develop.MyGoogleMapsNew;


import java.util.List;

import android.graphics.drawable.Drawable;
import android.os.Bundle;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class MyMapsActivity extends MapActivity {
    /** Called when the activity is first created. */

 public MyItemOverlay itemoverlay;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        //MapView = new MapView(this, "example_Maps_ApiKey_String");
        mapView.setBuiltInZoomControls(true);

        List<Overlay> mapOverlays = mapView.getOverlays();
        Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
        itemoverlay = new MyItemOverlay(drawable);

        GeoPoint point1 = new GeoPoint(19240000,-99120000);
        OverlayItem overlayitem1 = new OverlayItem(point1, "Hola, Mundo!", "I'm in Mexico City!");

        GeoPoint point2 = new GeoPoint(35410000, 139460000);
        OverlayItem overlayitem2 = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!");

        GeoPoint point3 = new GeoPoint(39000000, -77000000);
        OverlayItem overlayitem3 = new OverlayItem(point3, "","");


        itemoverlay.addOverlay(overlayitem1);
        itemoverlay.addOverlay(overlayitem2);
        itemoverlay.addOverlay(overlayitem3);

        mapOverlays.add(itemoverlay);

    }

    protected boolean isRouteDisplayed() {
        return false;
    }
}

MyItemOverlay class:

package net.learn2develop.MyGoogleMapsNew;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class MyItemOverlay extends ItemizedOverlay {

 private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
 private Context mContext;

 public MyItemOverlay(Drawable defaultMarker) {
  super(boundCenterBottom(defaultMarker));
  // TODO Auto-generated constructor stub
 }

 public MyItemOverlay(Drawable defaultMarker, Context context) {
    super(defaultMarker);
    mContext = context;
 }
 @Override
 protected boolean onTap(int index) {
   OverlayItem item = mOverlays.get(index);
   AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
   dialog.setTitle(item.getTitle());
   dialog.setMessage(item.getSnippet());
   dialog.show();
   return true;
 }

/* protected boolean onTap(int index) {
        OverlayItem item = mOverlays.get(index);
        AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
        dialog.setTitle(item.getTitle());
        dialog.setMessage(item.getSnippet());
        dialog.setPositiveButton("Yes", new OnClickListener() {    
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        dialog.show();
        return true;
    }
}*/


// @Override
 /*protected OverlayItem createItem(int arg0) {
  // TODO Auto-generated method stub
  return null;
 }*/

 /*@Override
 public int size() {
  // TODO Auto-generated method stub
  return 0;
 }*/

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

 public void addOverlay(OverlayItem overlay) {
     mOverlays.add(overlay);
     populate();
 }
 @Override
 protected OverlayItem createItem(int i) {
   return mOverlays.get(i);
 }


}

AndroidManifest.xml file

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="net.learn2develop.MyGoogleMapsNew"
      android:versionCode="1"
      android:versionName="1.0">
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
  <uses-library android:name="com.google.android.maps" />
         <activity android:name=".MyMapsActivity"
                  android:label="@string/app_name">
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
         </activity>


    </application>

    <uses-permission 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:name="android.permission.INTERNET">
    </uses-permission>

    <uses-permission 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:name="android.permission.ACCESS_COARSE_LOCATION">
    </uses-permission>
    <uses-sdk android:minSdkVersion="3" />

</manifest>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

×眷恋的温暖 2024-09-09 01:36:32

更改

itemoverlay = new MyItemOverlay(drawable);

itemoverlay = new MyItemOverlay(drawable, this);

MyMapsActivity.java

Change

itemoverlay = new MyItemOverlay(drawable);

to

itemoverlay = new MyItemOverlay(drawable, this);

in MyMapsActivity.java

捂风挽笑 2024-09-09 01:36:32

在 MyMapsActivity.java 中,您需要更改:(

itemoverlay = new MyItemOverlay(drawable);

如 Bobby P 提到的)并将

itemoverlay = new MyItemOverlay(drawable, this);

MyItemOverlay.java 中的第二个构造函数从: 更改

public MyItemOverlay(Drawable defaultMarker, Context context) 
{ 
   super(defaultMarker); 
   mContext = context; 
} 

为:

public MyItemOverlay(Drawable defaultMarker, Context context) 
{ 
   super(boundCenterBottom(defaultMarker)); 
   mContext = context; 
} 

In MyMapsActivity.java, you need to change:

itemoverlay = new MyItemOverlay(drawable);

(as mentioned by Bobby P) to

itemoverlay = new MyItemOverlay(drawable, this);

AND change your second constructor in MyItemOverlay.java from:

public MyItemOverlay(Drawable defaultMarker, Context context) 
{ 
   super(defaultMarker); 
   mContext = context; 
} 

to:

public MyItemOverlay(Drawable defaultMarker, Context context) 
{ 
   super(boundCenterBottom(defaultMarker)); 
   mContext = context; 
} 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文