无法在应用程序上显示Google Map视图

时间:2011-07-27 12:41:32

标签: android google-maps

首先,你必须知道英语不是我的母语,所以如果不好,我会道歉。

我是Android开发的新手,几个月前我必须继续使用由前同事创建的Android应用程序(他现在已经不在了)。

在此应用程序中,我们有一个用户列表及其地址,我必须通过点击这些地址来显示Google地图视图。即使谷歌地图被推出,也会引发异常。

以下是代码:

public class GMapsViewCopy extends MapActivity
{

private static final int DIALOG_ERREUR = 100;

    private MapView mapView;
    private MapController mc;
    private GeoPoint location;

    /**
     * Creation de l'activity
     */
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.gmapsview);
        setTitle("Google Maps");

        mapView = (MapView) this.findViewById(R.id.GMaps);
        mapView.setBuiltInZoomControls(true);

        String adresse = (String) this.getIntent().getStringExtra("adresse");
        Log.i("", "Adresse : " + adresse);
        location = this.getCoord(adresse);

        if (location != null)
        {
            Log.i("", "location != null");
            MonOverlay marker = new MonOverlay(getResources().getDrawable(R.drawable.marker));
            marker.addPoint(location);
            mapView.getOverlays().add(marker);

            this.mc = this.mapView.getController();
            this.mc.setCenter(this.location);
            this.mc.setZoom(16);
        } else
            showDialog(DIALOG_ERREUR);
    }

    /**
     * Permet de récuperer les coordonnées géographique du patient à partir de
     * son adresse
     * 
     * @param adresse
     * @return GeoPoint
     */
    private GeoPoint getCoord(String adresse)
    {
        GeoPoint point = null;
        Geocoder geoCoder = new Geocoder(this, Locale.getDefault());
        try
        {
            List<Address> addresses = geoCoder.getFromLocationName(adresse, 5);
            /*
             * for(int i=0; i<addresses.size(); i++) { Log.i("",
             * "Adresse["+i+"] : "+addresses.get(i)); }
             */
            if (addresses.size() > 0)
            {
                point = new GeoPoint(
                        (int) (addresses.get(0).getLatitude() * 1E6), 
                        (int) (addresses.get(0).getLongitude() * 1E6));
            }
        } catch (IOException e)
        {
            Log.i("", "exception : " + e);
            e.printStackTrace();
        }

        return point;
    }

    public GeoPoint getLocation()
    {
        return location;
    }

    public void setLocation(GeoPoint location)
    {
        this.location = location;
        this.mc.setCenter(this.location);
        this.mapView.invalidate();
    }

    @Override
    protected boolean isRouteDisplayed()
    {
        // TODO Auto-generated method stub
        return false;
    }

    public class MonOverlay extends ItemizedOverlay<OverlayItem>
    {
        List<GeoPoint> points = new ArrayList<GeoPoint>();

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

        @Override
        protected OverlayItem createItem(int i)
        {
            GeoPoint point = points.get(i);
            return new OverlayItem(point, "titre", "description");
        }

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

        public void addPoint(GeoPoint point)
        {
            this.points.add(point);
            populate();
        }
    }

    /**
     * Permet de créer des boites de dialog
     */
    protected Dialog onCreateDialog(int id)
    {
        switch (id)
        {
        case DIALOG_ERREUR:
            return new AlertDialog.Builder(GMapsViewCopy.this).setIcon(android.R.drawable.ic_menu_info_details)
                    .setTitle("Nous n'avons pas pu trouver l'adresse indiquée.")
                    .setPositiveButton("OK", new DialogInterface.OnClickListener()
                    {
                        public void onClick(DialogInterface dialog, int whichButton)
                        {
                            finish();
                        }
                    }).create();
        }
        return null;
    }

    /**
     * Fermeture de l'activity
     */
    protected void onDestroy()
    {
        super.onDestroy();
    }
}

我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cba.myandroid"
    android:versionCode="1"
    android:versionName="1.0">
    <application 
        android:icon="@drawable/icon" 
        android:theme="@android:style/Theme.Light"
        android:label="@string/app_name">

        <uses-library android:name="com.google.android.maps" />

<activity 
            android:name=".GMapsView"
            android:theme="@android:style/Theme.Light"
            android:label="@string/app_name">
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest> 

我的gmapview.xml(res / layout):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <com.google.android.maps.MapView 
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="myKey"
        />

    <LinearLayout android:id="@+id/zoom" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentBottom="true" 
        android:layout_centerHorizontal="true" 
        /> 
</RelativeLayout>

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

首先,你的例外究竟是什么? 其次,如果您在调试器上进行测试,请确保您使用的是基于Google API的AVD。基于标准平台的AVD无法运行谷歌地图视图。为此,您需要使用ADT界面下载额外的包。 第三,你需要在你的gmapview.xml中填写你的api密钥android:apiKey。您可以在此处找到有关此点的更多信息:http://developer.android.com/resources/tutorials/views/hello-mapview.html