在Android上的警报对话框中显示google places api的格式化电话号码?
我一直在使用以下关于GoogleMapsAPI和GooglePlacesAPI的教程 非常好。我已经设法在地图上显示附近地方的标记,并为不同类别显示不同类型的标记。但是,当用户单击我的一个标记时,我还希望在警报对话框中显示该机构的电话号码。为此,我使用了地点详细信息搜索 下面,我将提供一段我遇到问题的地图活动代码在Android上的警报对话框中显示google places api的格式化电话号码?,android,google-places-api,Android,Google Places Api,我一直在使用以下关于GoogleMapsAPI和GooglePlacesAPI的教程 非常好。我已经设法在地图上显示附近地方的标记,并为不同类别显示不同类型的标记。但是,当用户单击我的一个标记时,我还希望在警报对话框中显示该机构的电话号码。为此,我使用了地点详细信息搜索 下面,我将提供一段我遇到问题的地图活动代码 //Map Activity OnCreate() //Check for null nearPlaces if(nearPlaces.results!=null) { //
//Map Activity OnCreate()
//Check for null nearPlaces
if(nearPlaces.results!=null)
{
//Loop through all places
for(Place place:nearPlaces.results)
{
latitude=place.geometry.location.lat;
longitude=place.geometry.location.lng;
placeRef=place.reference;
new LoadDetails().execute(placeRef);
for(String s:place.types)
{
if(s.contains("restaurant"))
{
Drawable rMarker=this.getResources().getDrawable(R.drawable.restaurant);
//phone=lp.getPhone();
iOverlay=new MyItemizedOverlay(rMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating+" "+phone);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
我有一个可变字符串电话,我想成为该机构的电话号码
下面是扩展AsyncTask的LoadDetails类
private class LoadDetails extends AsyncTask<String, String, String>
{
@Override
protected void onPostExecute(String result) {
if(placeDetails!=null)
{
if(placeDetails.status.equals("OK"))
{
if(placeDetails.result!=null)
{
phone=placeDetails.result.formatted_phone_number;
Log.d("Phone #'s",phone);
}
}
}
}
@Override
protected String doInBackground(String... params) {
String reference=params[0];
googlePlaces=new GooglePlaces();
try{
placeDetails=googlePlaces.getPlaceDetails(reference);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
私有类LoadDetails扩展异步任务
{
@凌驾
受保护的void onPostExecute(字符串结果){
if(placeDetails!=null)
{
if(placeDetails.status.equals(“OK”))
{
if(placeDetails.result!=null)
{
phone=placeDetails.result.formatted_phone_number;
Log.d(“电话”,Phone);
}
}
}
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串引用=参数[0];
googlePlaces=新的googlePlaces();
试一试{
placeDetails=googlePlaces.getPlaceDetails(参考);
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
}
在OnPostExecute中,设置变量phone,我的LogCat显示各个地方的电话号码。但是,当我在手机上转到地图活动并单击餐厅的标记时,变量phone始终为空。我该如何解决这个问题
任何帮助都会很好
提前谢谢
编辑:整个MapActivity
公共类映射扩展了MapActivity{
MapView mapView;
MapController mc;
GeoPoint gp, fGP;
List<Overlay> mapOverlays;
OverlayItem oItem;
MyItemizedOverlay iOverlay;
String placeRef,phone,placePhone;
double latitude,longitude;
double user_lat,user_long;
double friendLat,friendLong;
String userName,friendName,userStatus,userPhoneNumber;
//Nearest Places
PlacesList nearPlaces;
GooglePlaces googlePlaces;
PlaceDetails placeDetails;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.map);
mapView=(MapView) findViewById(R.id.mapView);
mapView.setBuiltInZoomControls(true);
mc=mapView.getController();
Intent i=getIntent();
if (i!=null)
{
//Receive User's Lat and Long
user_lat=i.getDoubleExtra("userLAT", 0);
user_long=i.getDoubleExtra("userLONG",0);
userPhoneNumber=i.getStringExtra("userNUMBER");
//Get User's Status they posted
userStatus=i.getStringExtra("STATUS");
//Get User's Name
userName=i.getStringExtra("userNAME");
//Receive Friend's Lat and Long
friendLat=i.getDoubleExtra("friendLAT", 0);
friendLong=i.getDoubleExtra("friendLong",0);
//Obtain nearPlaces List from Main Activity
nearPlaces=(PlacesList) i.getSerializableExtra("userNearPlaces");
friendName=i.getStringExtra("friendNAME");
Log.d("Map", userName+ " " +user_lat + " " + user_long);
Log.d("Map2", friendName+ " " + friendLat + " " + friendLat);
gp=new GeoPoint((int)(user_lat*1E6),(int)(user_long*1E6));
//Friend's GeoPoint
fGP=new GeoPoint((int)(friendLat*1E6),(int)(friendLong*1E6));
}
mapOverlays=mapView.getOverlays();
Drawable marker=this.getResources().getDrawable(R.drawable.you);
iOverlay=new MyItemizedOverlay(marker, this);
oItem=new OverlayItem(gp,"Your Location, "+userName,userStatus);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
Drawable fMarker=this.getResources().getDrawable(R.drawable.smiley);
iOverlay=new MyItemizedOverlay(fMarker,this);
//Add friend marker to the map
oItem=new OverlayItem(fGP,friendName+"'s Location", "This is your friend");
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
//Check for null nearPlaces
if(nearPlaces.results!=null)
{
//Loop through all places
for(Place place:nearPlaces.results)
{
latitude=place.geometry.location.lat;
longitude=place.geometry.location.lng;
placeRef=place.reference;
placePhone=place.phone;
new LoadDetails().execute(placeRef);
for(String s:place.types)
{
if(s.contains("restaurant"))
{
Drawable rMarker=this.getResources().getDrawable(R.drawable.restaurant);
//phone=lp.getPhone();
iOverlay=new MyItemizedOverlay(rMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating+" "+placePhone);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
if((s.contains("cafe"))||place.name.contains("cafe"))
{
Drawable cafeMarker=this.getResources().getDrawable(R.drawable.cafe);
iOverlay=new MyItemizedOverlay(cafeMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
else if((s.contains("liquor_store"))||place.name.contains("liquors"))
{
Drawable barMarker=this.getResources().getDrawable(R.drawable.bar);
iOverlay=new MyItemizedOverlay(barMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
else if(s.contains("department_store")||s.contains("clothing_store")||s.contains("convenience_store"))
{
Drawable shopMarker=this.getResources().getDrawable(R.drawable.mall);
iOverlay=new MyItemizedOverlay(shopMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
else if(s.contains("hospital"))
{
Drawable hMarker=this.getResources().getDrawable(R.drawable.hospital);
iOverlay=new MyItemizedOverlay(hMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
else if(s.contains("movie_theater"))
{
Drawable movieMarker=this.getResources().getDrawable(R.drawable.movierental);
iOverlay=new MyItemizedOverlay(movieMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
else if(s.contains("pharmacy"))
{
Drawable pMarker=this.getResources().getDrawable(R.drawable.pharmacy);
iOverlay=new MyItemizedOverlay(pMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
else if(s.contains("hair_care"))
{
Drawable bMarker=this.getResources().getDrawable(R.drawable.barber);
iOverlay=new MyItemizedOverlay(bMarker,this);
//GeoPoint to place on map
gp=new GeoPoint((int)(latitude*1E6),(int)(longitude*1E6));
//Map overlay item
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
}
}
}
mapView.getController();
mc.animateTo(gp);
mc.setZoom(15);
mc.setCenter(gp);
mapView.invalidate();
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
private class LoadDetails extends AsyncTask<String, String, String>
{
@Override
protected void onPostExecute(String result) {
placePhone=result;
//My Logcat shows phone numbers being assigned to placePhone
Log.d("placePhone",placePhone);
}
@Override
protected String doInBackground(String... params) {
String reference=params[0];
googlePlaces=new GooglePlaces();
try{
placeDetails=googlePlaces.getPlaceDetails(reference);
}catch (Exception e){
e.printStackTrace();
}
if(placeDetails!=null)
{
if(placeDetails.status.equals("OK"))
{
if(placeDetails.result!=null)
{
phone=placeDetails.result.formatted_phone_number;
}
}
}
return phone;
}
}
private class MyItemizedOverlay extends ItemizedOverlay<OverlayItem>
{
private ArrayList<OverlayItem> mOverlays=new ArrayList<OverlayItem>();
Context mContext;
public MyItemizedOverlay(Drawable marker) {
super(boundCenterBottom(marker));
}
public MyItemizedOverlay(Drawable marker,Context context) {
super(boundCenterBottom(marker));
mContext=context;
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
public void addOVerlay(OverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
@Override
public boolean onTap(int i) {
OverlayItem item= mOverlays.get(i);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
if(item.getTitle().contains("Location"))
{
dialog.setNegativeButton("Send SMS", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent smsIntent=new Intent(Intent.ACTION_SENDTO);
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.setData(Uri.parse("sms:"+userPhoneNumber));
startActivity(smsIntent);
}
});
dialog.setPositiveButton("Call", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String uri="tel:"+userPhoneNumber.trim();
Intent callIntent=new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse(uri));
startActivity(callIntent);
}
});
}
dialog.show();
return true;
}
}
MapView-MapView;
地图控制器;
地质点gp,fGP;
列出地图覆盖图;
覆盖层;
MyItemizedOverlay-iOverlay;
字符串placeRef,phone,placePhone;
双纬度,经度;
双用户_lat,用户_long;
双friendLat,friendLong;
字符串用户名、friendName、userStatus、userPhoneNumber;
//最近的地方
附近的地方;
GooglePlaces GooglePlaces;
地点详情地点详情;
@凌驾
创建时受保护的void(包arg0){
//TODO自动生成的方法存根
super.onCreate(arg0);
setContentView(R.layout.map);
mapView=(mapView)findViewById(R.id.mapView);
mapView.SetBuilTinZoomControl(真);
mc=mapView.getController();
Intent i=getIntent();
如果(i!=null)
{
//接收用户的Lat和Long
user_lat=i.getDoubleExtra(“userLAT”,0);
user_long=i.getDoubleExtra(“userLONG”,0);
userPhoneNumber=i.getStringExtra(“userNUMBER”);
//获取他们发布的用户状态
userStatus=i.getStringExtra(“状态”);
//获取用户名
用户名=i.getStringExtra(“用户名”);
//收到朋友的信
friendLat=i.getDoubleExtra(“friendLat”,0);
friendLong=i.getDoubleExtra(“friendLong”,0);
//从主活动中获取近地点列表
nearPlaces=(PlacesList)i.getSerializableExtra(“userNearPlaces”);
friendName=i.getStringExtra(“friendName”);
Log.d(“映射”,用户名+“”+user\u lat+“”+user\u long);
Log.d(“Map2”,friendName+“”+friendLat+“”+friendLat);
gp=新的地质点((int)(用户纬度*1E6),(int)(用户纬度*1E6));
//朋友的地球点
fGP=新的地质点((int)(friendLat*1E6),(int)(friendLong*1E6));
}
mapOverlays=mapView.getOverlays();
Drawable marker=this.getResources().getDrawable(R.Drawable.you);
iOverlay=新的MyItemizedOverlay(标记,this);
oItem=新覆盖项(gp,“您的位置”+用户名、用户状态);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
Drawable-fMarker=this.getResources().getDrawable(R.Drawable.smiley);
iOverlay=新的MyItemizeOverlay(fMarker,this);
//将好友标记添加到地图
oItem=新的覆盖项(fGP,friendName+““的位置”,“这是你的朋友”);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
//检查空的近位置
if(nearPlaces.results!=null)
{
//环游各地
用于(地点:nearPlaces.results)
{
纬度=place.geometry.location.lat;
经度=place.geometry.location.lng;
placeRef=place.reference;
placePhone=place.phone;
new LoadDetails().execute(placeRef);
for(字符串s:place.types)
{
如果(s.包含(“餐厅”))
{
Drawable rMarker=this.getResources().getDrawable(R.Drawable.restaurant);
//phone=lp.getPhone();
iOverlay=新的MyItemizedOverlay(rMarker,this);
//要在地图上放置的地质点
gp=新的地质点((int)(纬度*1E6),(int)(经度*1E6));
//地图覆盖项目
oItem=新的覆盖项(gp,place.name,place.neighborary+“\n”+”评级:“+place.Rating+”+placePhone);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem);
mapOverlays.add(iOverlay);
}
如果((s.contains(“cafe”)| | place.name.contains(“cafe”))
{
Drawable cafeMarker=this.getResources().getDrawable(R.Drawable.cafe);
iOverlay=新的MyItemizedOverlay(cafeMarker,this);
//要在地图上放置的地质点
gp=新的地质点((int)(纬度*1E6),(int)(经度*1E6));
//地图覆盖项目
oItem=新的覆盖项(gp,place.name,place.neighborary+“\n”+”评级:“+place.Rating);
iOverlay.addOVerlay(oItem);
iOverlay.addOVerlay(oItem)
oItem=new OverlayItem(gp, place.name, place.vicinity+"\n"+"Rating: "+place.rating+" "+ place.formatted_phone_number);