在Android上的警报对话框中显示google places api的格式化电话号码?

在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) { //

我一直在使用以下关于GoogleMapsAPI和GooglePlacesAPI的教程

非常好。我已经设法在地图上显示附近地方的标记,并为不同类别显示不同类型的标记。但是,当用户单击我的一个标记时,我还希望在警报对话框中显示该机构的电话号码。为此,我使用了地点详细信息搜索

下面,我将提供一段我遇到问题的地图活动代码

//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);