首先,你必须知道英语不是我的母语,所以如果不好,我会道歉。
我是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>
感谢您的帮助:)
答案 0 :(得分:0)
首先,你的例外究竟是什么? 其次,如果您在调试器上进行测试,请确保您使用的是基于Google API的AVD。基于标准平台的AVD无法运行谷歌地图视图。为此,您需要使用ADT界面下载额外的包。 第三,你需要在你的gmapview.xml中填写你的api密钥android:apiKey。您可以在此处找到有关此点的更多信息:http://developer.android.com/resources/tutorials/views/hello-mapview.html