Не удается отобразить представление Google Map в приложении - PullRequest
0 голосов
/ 27 июля 2011

Во-первых, вы должны знать, что английский не мой родной язык, поэтому я прошу прощения, если это плохо.

Я новичок в разработке для Android, и мне нужно продолжить приложение для Android, запущенное бывшим коллегой по работе несколько месяцев назад (он сейчас ушел).

В этом приложении у нас есть список пользователей с их адресами, и мне нужно отобразить вид карты Google, нажав на адреса этих тезисов. Даже если Google Map запускается, возникает исключение.

Вот код:

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 голосов
/ 27 июля 2011

Во-первых, что именно является вашим исключением? Во-вторых, если вы тестируете на отладчике, убедитесь, что вы используете AVD, основанный на API Google. AVD на основе стандартной платформы не может запустить просмотр карт Google. Для этого вам необходимо скачать дополнительный пакет с интерфейсом ADT. В-третьих, вам нужно заполнить свой ключ api android: apiKey в вашем gmapview.xml. Вы найдете больше информации об этой точке здесь: http://developer.android.com/resources/tutorials/views/hello-mapview.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...