谷歌执行API地方 [英] Implementing Google Places API

查看:193
本文介绍了谷歌执行API地方的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在努力的最后几天找到这个简单的教程,但它好像有与谷歌的API一样简单没有这样的事。结果
以下是我目前所知
使用url将包含长,纬度和API_KEY第1步发送HTTP消息
步骤2中得到结果和prasae它
步骤3用数据来获得我所需要的。
我刚才似乎无法推测出来。如果你能提供给我一个例子,或只是如何实现这个API什么这将是伟大的!
我的Java文件

 包com.example.learnaboutme;进口java.io.BufferedReader中;
进口java.io.IOException异常;
进口的java.io.InputStream;
进口java.io.InputStreamReader中;
进口java.io.UnsupportedEncodingException;
进口的java.util.ArrayList;
进口的java.util.List;
进口java.util.Timer中;
进口java.util.TimerTask中;进口org.apache.commons.logging.Log;
进口org.apache.http.HttpEntity;
进口org.apache.http.Htt presponse;
进口org.apache.http.client.ClientProtocolException;
进口org.apache.http.client.methods.HttpPost;
进口org.apache.http.impl.client.DefaultHttpClient;
进口org.json.JSONArray;
进口org.json.JSONObject;进口android.app.ProgressDialog;
进口android.content.Context;
进口android.graphics.Color;
进口android.location.Location;
进口android.os.AsyncTask;
进口android.os.Bundle;
进口android.os.Handler;
进口android.support.v4.app.FragmentActivity;
进口android.view.Menu;
进口android.widget.RelativeLayout;
进口android.widget.TextView;进口com.google.android.gms.maps.GoogleMap;
进口com.google.android.gms.maps.SupportMapFragment;
进口com.google.android.gms.maps.model.BitmapDesc​​riptorFactory;
进口com.google.android.gms.maps.model.LatLng;
进口com.google.android.gms.maps.model.Marker;
进口com.google.android.gms.maps.model.MarkerOptions;
进口com.google.android.gms.maps.model.Polyline;
进口com.google.android.gms.maps.model.PolylineOptions;公共类MainActivity扩展FragmentActivity {   上下文[]中context =新的上下文[1];
   GPS [] = GPS新科GPS [1];
   宾至如归= NULL;
   RelativeLayout的[]相对=新的RelativeLayout [1];
   XMLParase xmlParase = NULL;
   私人GoogleMap的MYMAP;
   折线线;   地点位置;   //静态经纬度
   经纬度startLatLng =新的经纬度(30.707104,76.690749);
   经纬度endLatLng =新的经纬度(30.721419,76.730017);   保护无效的onCreate(捆绑savedInstanceState){
      super.onCreate(savedInstanceState);
      this.setContentView(R.layout.activity_main);
      最后的TextView文本=(TextView的)this.findViewById(R.id.text);
      GPS [0] =新的GPS();
      GPS [0]。开始(本);
      首页=新主页();
      背景[0] =这一点;
      REL [0] =(RelativeLayout的)findViewById(R.id.rel);
      home.Initalize(相对,背景);
      xmlParase =新XMLParase();
      位置= GPS [0] .GetCoor();
      MYMAP =((SupportMapFragment)getSupportFragmentManager()
              .findFragmentById(R.id.mapk))的GetMap()。
      尝试{          最后的经纬度PERTH =新的经纬度(-31.90,115.86);
          标记珀斯= myMap.addMarker(新的MarkerOptions()
                                    .POSITION(PERTH)
                                    .anchor((浮点)0.5(浮点)0.5)
                                    .rotation((浮点)90.0));          字符串urlTopass = makeURL(startLatLng.latitude,
                  startLatLng.longitude,endLatLng.latitude,
                  endLatLng.longitude);
         //新connectAsyncTask(urlTopass).execute();      }赶上(例外五){
          e.printStackTrace();
      }      定时器定时器=新的Timer();
      最后的处理程序处理程序=新的处理程序();
      timer.schedule(新的TimerTask(){
          公共无效的run(){
              handler.post(新的Runnable(){
                  公共无效的run()
                  {
                      home.Check(GPS);
                      字符串数据= MainActivity.this.xmlParase.readXML(locations.xml,语境[0],家,地址);
                      如果(!data.equals()){
                         text.setText(数据);
                      }
                  }
              });
          }
      },2000,1000);
   }   私有类connectAsyncTask扩展的AsyncTask<太虚,太虚,字符串> {
       私人ProgressDialog progressDialog;
       字符串URL;       connectAsyncTask(字符串urlPass){
           URL = urlPass;
       }       @覆盖
       在preExecute保护无效(){
           // TODO自动生成方法存根
           super.on preExecute();
           progressDialog =新ProgressDialog(上下文[0]);
           progressDialog.setMessage(读取路线,请稍候......);
           progressDialog.setIndeterminate(真);
           progressDialog.show();
       }       @覆盖
       保护字符串doInBackground(虚空...... PARAMS){
           JSONParser jParser =新JSONParser();
           JSON字符串= jParser.getJSONFromUrl(URL);
           返回JSON;
       }       @覆盖
       保护无效onPostExecute(字符串结果){
           super.onPostExecute(结果);
           progressDialog.hide();
           如果(结果!= NULL){
               drawPath(结果);
           }
       }
   }   公共字符串makeURL(双sourcelat,双sourcelog,双destlat,
           双destlog){
       StringBuilder的urlString =新的StringBuilder();
       urlString.append(http://maps.googleapis.com/maps/api/directions/json);
       urlString.append(原产地=?); //从
       urlString.append(Double.toString(sourcelat));
       urlString.append(,);
       urlString.append(Double.toString(sourcelog));
       urlString.append(&放大器;目的地=); //给
       urlString.append(Double.toString(destlat));
       urlString.append(,);
       urlString.append(Double.toString(destlog));
       urlString.append(与&传感器=假放;模式=驾驶及放;替代品=真正的);
       返回urlString.toString();
   }   公共类JSONParser {       InputStream为= NULL;
       JSONObject的jObj = NULL;
       JSON字符串=;       //构造
       公共JSONParser(){
       }       公共字符串getJSONFromUrl(字符串URL){           //使HTTP请求
           尝试{
               // defaultHttpClient
               DefaultHttpClient的HttpClient =新DefaultHttpClient();
               HttpPost httpPost =新HttpPost(URL);               HTT presponse HTT presponse = httpClient.execute(httpPost);
               HttpEntity httpEntity = HTT presponse.getEntity();
               是= httpEntity.getContent();           }赶上(UnsupportedEncodingException五){
               e.printStackTrace();
           }赶上(ClientProtocolException E){
               e.printStackTrace();
           }赶上(IOException异常五){
               e.printStackTrace();
           }
           尝试{
               读者的BufferedReader =新的BufferedReader(
                       新InputStreamReader的(是ISO-8859-1),8);
               StringBuilder的SB =新的StringBuilder();
               串线= NULL;
               而((行= reader.readLine())!= NULL){
                   sb.append(行+\\ n);
               }               JSON = sb.toString();
               is.close();
           }赶上(例外五){
           }
           返回JSON;       }
   }   公共无效drawPath(字符串结果){
       如果(行!= NULL){
           myMap.clear();
       }
       myMap.addMarker(新的MarkerOptions()位置(endLatLng).icon(
               BitmapDesc​​riptorFactory.fromResource(R.drawable.ic_launcher)));
       myMap.addMarker(新的MarkerOptions()位置(startLatLng).icon(
               BitmapDesc​​riptorFactory.fromResource(R.drawable.ic_launcher)));
       尝试{
           //变换分析串入一个JSON对象
           最后JSONObject的JSON =新的JSONObject(结果);
           JSONArray routeArray = json.getJSONArray(路线);
           的JSONObject路由= routeArray.getJSONObject(0);
           JSONObject的overviewPolylines =路线
                   .getJSONObject(overview_polyline);
           字符串连接codedString = overviewPolylines.getString(分);
           清单<&经纬度GT;列表=去$ C $℃聚(EN codedString);           的PolylineOptions选项=新的PolylineOptions()宽(5)。颜色(Color.BLUE).geodesic(真)。
           对于(INT Z = 0; z,其中,则为list.size(); Z ++){
               点的LatLng = list.get(Z);
               options.add(点);
           }
           行= myMap.addPolyline(选件);           / *为(INT Z = 0; z,其中,则为list.size() - 1; Z ++){
               经纬度SRC = list.get(Z);
               经纬度DEST = list.get(Z + 1);
               行= myMap.addPolyline(新的PolylineOptions()
                       。新增(新经纬度(src.latitude,src.longitude)
                               新的经纬度(dest.latitude,dest.longitude))
                       .WIDTH(5)。颜色(Color.BLUE).geodesic(真));
           } * /       }赶上(例外五){
           e.printStackTrace();
       }
   }   私人列表<&经纬度GT;德$ C $℃聚(字符串连接codeD){       清单<&经纬度GT;聚=新的ArrayList<&经纬度GT;();
       INT指数= 0,LEN = EN coded.length();
       INT纬度= 0,经度= 0;       而(指数< LEN){
           INT B,移= 0,结果为0;
           做{
               B = EN coded.charAt(指数++) - 63;
               结果| =(B&安培; 0x1F的)LT;<转移;
               移动+ = 5;
           }而(B> = 0x20的);
           INT DLAT =((导致与放大器; 1)= 0〜(结果>→1):?(导致与GT;→1));
           纬度+ = DLAT;           移= 0;
           结果= 0;
           做{
               B = EN coded.charAt(指数++) - 63;
               结果| =(B&安培; 0x1F的)LT;<转移;
               移动+ = 5;
           }而(B> = 0x20的);
           INT DLNG =((导致与放大器; 1)= 0〜(结果>→1):?(导致与GT;→1));
           LNG + = DLNG;           的LatLng P =新的经纬度((((双)纬度/ 1E5))
                   (((双)LNG / 1E5)));
           poly.add(P);
       }       返回聚;
   }
   公共布尔onCreateOptionsMenu(菜单VAR1){
      。this.getMenuInflater()膨胀(R.menu.main,VAR1);
      返回true;
   }
}

我的xml文件

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    的xmlns:地图=htt​​p://schemas.android.com/apk/res-auto
    机器人:paddingTop =@扪/ activity_vertical_margin
    工具:上下文=。MainActivity
    机器人:ID =@ + ID /相对>    <的TextView
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=@字符串/参考hello world
        机器人:ID =@ + ID /文本/>
    <片段
        机器人:ID =@ + ID / MAPK
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        类=com.google.android.gms.maps.SupportMapFragment/>< / RelativeLayout的>

我流汗的误差

  01-10 16:47:16.283:W / ActivityThread(8390):应用com.example.learnaboutme正在等待调试器端口8100 ...
01-10 16:47:16.303:我/的System.out(8390):发送WAIT块
01-10 16:47:16.503:我/的System.out(8390):调试器连接
01-10 16:47:16.503:我/的System.out(8390):等待调试器来解决...
01-10 16:47:16.703:我/的System.out(8390):等待调试器来解决...
01-10 16:47:16.904:我/的System.out(8390):等待调试器来解决...
01-10 16:47:17.104:我/的System.out(8390):等待调试器来解决...
01-10 16:47:17.304:我/的System.out(8390):等待调试器来解决...
01-10 16:47:17.504:我/的System.out(8390):等待调试器来解决...
01-10 16:47:17.704:我/的System.out(8390):等待调试器来解决...
01-10 16:47:17.905:我/的System.out(8390):等待调试器来解决...
01-10 16:47:18.105:我/的System.out(8390):等待调试器来解决...
01-10 16:47:18.305:我/的System.out(8390):等待调试器来解决...
01-10 16:47:18.505:我/的System.out(8390):等待调试器来解决...
01-10 16:47:18.706:我/的System.out(8390):调试先后落户(1424)
01-10 16:51:07.610:W / dalvikvm(8390):主题ID = 1:螺纹未捕获的异常(组= 0x410789d8)退出
01-10 16:51:07.680:E / AndroidRuntime(8390):致命异常:主要
01-10 16:51:07.680:E / AndroidRuntime(8390):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.learnaboutme / com.example.learnaboutme.MainActivity}:android.view.InflateException:二进制XML文件行#18:错误充气类片段
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1960)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.ActivityThread.access $ 600(ActivityThread.java:127)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1151)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.os.Handler.dispatchMessage(Handler.java:99)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.os.Looper.loop(Looper.java:137)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.ActivityThread.main(ActivityThread.java:4477)
01-10 16:51:07.680:E / AndroidRuntime(8390):在java.lang.reflect.Method.invokeNative(本机方法)
01-10 16:51:07.680:E / AndroidRuntime(8390):在java.lang.reflect.Method.invoke(Method.java:511)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:788)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
01-10 16:51:07.680:E / AndroidRuntime(8390):在dalvik.system.NativeStart.main(本机方法)
01-10 16:51:07.680:E / AndroidRuntime(8390):android.view.InflateException:二进制XML文件行#18:错误充气类片段产生的原因
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.view.LayoutInflater.inflate(LayoutInflater.java:489)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:262)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.Activity.setContentView(Activity.java:2071)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.example.learnaboutme.MainActivity.onCreate(MainActivity.java:61)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.Activity.performCreate(Activity.java:4701)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924)
01-10 16:51:07.680:E / AndroidRuntime(8390):11 ...更多
01-10 16:51:07.680:E / AndroidRuntime(8390):java.lang.IllegalStateException:在应用的Andr​​oidManifest.xml中的元数据标签没有正确的价值所致。预计4030500但发现0您必须在&lt中的以下声明;用途>元素:其中,元数据机器人:名字=com.google.android.gms.version机器人:值=@整数/ GOOGLE_PLAY_SERVICES_VERSION/>
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.common.GooglePlayServicesUtil.n(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.maps.internal.q.v(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.maps.internal.q.u(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.maps.MapsInitializer.initialize(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.maps.SupportMapFragment $ b.cE(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.maps.SupportMapFragment $ b.a(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.dynamic.a.a(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.dynamic.a.onInflate(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在com.google.android.gms.maps.SupportMapFragment.onInflate(来源不明)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:290)
01-10 16:51:07.680:E / AndroidRuntime(8390):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
01-10 16:51:07.680:E / AndroidRuntime(8390):21 ...更多


解决方案

下面是所有你需要的参考。

https://developers.google.com/places/documentation/

<一href=\"https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapFragment\" rel=\"nofollow\">https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapFragment

你也可以使用同样的一些东西一样下述..

检查这个简单的类,它实现你所需要的。

 公共类MainActivity扩展FragmentActivity实现OnClickListener {    私人GoogleMap的MYMAP;
    折线线;
    上下文语境;    地点位置;
    布尔check_provider_enabled = FALSE;    //静态经纬度
    经纬度startLatLng =新的经纬度(30.707104,76.690749);
    经纬度endLatLng =新的经纬度(30.721419,76.730017);    公共无效的onCreate(捆绑BD){
        super.onCreate(BD);
        的setContentView(R.layout.activity_main);
        上下文= MainActivity.this;        // GoogleMap的MYMAP
        MYMAP =((SupportMapFragment)getSupportFragmentManager()
                .findFragmentById(R.id.map))的GetMap()。        / *
        //构造一个CameraPosition重点山景和相机动画到该位置。
        CameraPosition cameraPosition =新CameraPosition.Builder()
            //.target(endLatLng)//设置地图的山景城中心
            .zoom(17)//设置缩放
            .bearing(90)//设置相机的方向向东
            .tilt(30)//设置照相机的倾斜至30度
            。建立(); //创建从一个建设者CameraPosition
        myMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); * /        myMap.setMyLocationEnabled(真);
        myMap.moveCamera(CameraUpdateFactory.newLatLng(startLatLng));
        myMap.animateCamera(CameraUpdateFactory.zoomTo(12));        myMap.getUiSettings()setZoomControlsEnabled(假)。        的LocationManager服务=(的LocationManager)getSystemService(LOCATION_SERVICE);
        布尔启用= service.isProviderEnabled(LocationManager.GPS_PROVIDER);
        位置= service.getLastKnownLocation(LocationManager.GPS_PROVIDER);        //检查是否启用,如果不发送用户普惠制设置
        //更好的解决办法是显示一个对话框,并建议到
        //转到设置
        如果(!启用){
          / *意向意图=新意图(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
          startActivity(意向); * /
            意向意图=新意图(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(意向);
            Toast.makeText(getApplicationContext(),启用GPS servcies使用这个应用程序。Toast.LENGTH_LONG).show();
        }其他{            尝试{                最后的经纬度PERTH =新的经纬度(-31.90,115.86);
                标记珀斯= myMap.addMarker(新的MarkerOptions()
                                          .POSITION(PERTH)
                                          .anchor((浮点)0.5(浮点)0.5)
                                          .rotation((浮点)90.0));                字符串urlTopass = makeURL(startLatLng.latitude,
                        startLatLng.longitude,endLatLng.latitude,
                        endLatLng.longitude);
               //新connectAsyncTask(urlTopass).execute();            }赶上(例外五){
                e.printStackTrace();
            }        }       / *如果(MYMAP!= NULL){
            标记汉堡= myMap.addMarker(新的MarkerOptions()位置(startLatLng)
                .title伪(汉堡));
            标记基尔= myMap.addMarker(新的MarkerOptions()
                .POSITION(endLatLng)
                .title伪(维韦克)
                是.snippet(VIVEK的Andr​​oid黑客)
                .icon(BitmapDesc​​riptorFactory
                    .fromResource(R.drawable.one)));
          } * /        //现在自动点击按钮
       // btntemp.performClick();
    }
/ *
    @覆盖
    公共无效的onClick(视图v){        开关(v.getId()){
        案例R.id.btn_pass_home_call_temp:
            字符串urlTopass = makeURL(startLatLng.latitude,
                    startLatLng.longitude,endLatLng.latitude,
                    endLatLng.longitude);
            新connectAsyncTask(urlTopass).execute();
            打破;        默认:
            打破;
        }    } * /    私有类connectAsyncTask扩展的AsyncTask&LT;太虚,太虚,字符串&GT; {
        私人ProgressDialog progressDialog;
        字符串URL;        connectAsyncTask(字符串urlPass){
            URL = urlPass;
        }        @覆盖
        在preExecute保护无效(){
            // TODO自动生成方法存根
            super.on preExecute();
            progressDialog =新ProgressDialog(背景);
            progressDialog.setMessage(读取路线,请稍候......);
            progressDialog.setIndeterminate(真);
            progressDialog.show();
        }        @覆盖
        保护字符串doInBackground(虚空...... PARAMS){
            JSONParser jParser =新JSONParser();
            JSON字符串= jParser.getJSONFromUrl(URL);
            返回JSON;
        }        @覆盖
        保护无效onPostExecute(字符串结果){
            super.onPostExecute(结果);
            progressDialog.hide();
            如果(结果!= NULL){
                drawPath(结果);
            }
        }
    }    公共字符串makeURL(双sourcelat,双sourcelog,双destlat,
            双destlog){
        StringBuilder的urlString =新的StringBuilder();
        urlString.append(http://maps.googleapis.com/maps/api/directions/json);
        urlString.append(原产地=?); //从
        urlString.append(Double.toString(sourcelat));
        urlString.append(,);
        urlString.append(Double.toString(sourcelog));
        urlString.append(&放大器;目的地=); //给
        urlString.append(Double.toString(destlat));
        urlString.append(,);
        urlString.append(Double.toString(destlog));
        urlString.append(与&amp;传感器=假放;模式=驾驶及放;替代品=真正的);
        返回urlString.toString();
    }    公共类JSONParser {        InputStream为= NULL;
        JSONObject的jObj = NULL;
        JSON字符串=;        //构造
        公共JSONParser(){
        }        公共字符串getJSONFromUrl(字符串URL){            //使HTTP请求
            尝试{
                // defaultHttpClient
                DefaultHttpClient的HttpClient =新DefaultHttpClient();
                HttpPost httpPost =新HttpPost(URL);                HTT presponse HTT presponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = HTT presponse.getEntity();
                是= httpEntity.getContent();            }赶上(UnsupportedEncodingException五){
                e.printStackTrace();
            }赶上(ClientProtocolException E){
                e.printStackTrace();
            }赶上(IOException异常五){
                e.printStackTrace();
            }
            尝试{
                读者的BufferedReader =新的BufferedReader(
                        新InputStreamReader的(是ISO-8859-1),8);
                StringBuilder的SB =新的StringBuilder();
                串线= NULL;
                而((行= reader.readLine())!= NULL){
                    sb.append(行+\\ n);
                }                JSON = sb.toString();
                is.close();
            }赶上(例外五){
                Log.e(缓冲区错误,错误转换结果+ e.toString());
            }
            返回JSON;        }
    }    公共无效drawPath(字符串结果){
        如果(行!= NULL){
            myMap.clear();
        }
        myMap.addMarker(新的MarkerOptions()位置(endLatLng).icon(
                BitmapDesc​​riptorFactory.fromResource(R.drawable.ic_launcher)));
        myMap.addMarker(新的MarkerOptions()位置(startLatLng).icon(
                BitmapDesc​​riptorFactory.fromResource(R.drawable.ic_launcher)));
        尝试{
            //变换分析串入一个JSON对象
            最后JSONObject的JSON =新的JSONObject(结果);
            JSONArray routeArray = json.getJSONArray(路线);
            的JSONObject路由= routeArray.getJSONObject(0);
            JSONObject的overviewPolylines =路线
                    .getJSONObject(overview_polyline);
            字符串连接codedString = overviewPolylines.getString(分);
            清单&LT;&经纬度GT;列表=去$ C $℃聚(EN codedString);            的PolylineOptions选项=新的PolylineOptions()宽(5)。颜色(Color.BLUE).geodesic(真)。
            对于(INT Z = 0; z,其中,则为list.size(); Z ++){
                点的LatLng = list.get(Z);
                options.add(点);
            }
            行= myMap.addPolyline(选件);            / *为(INT Z = 0; z,其中,则为list.size() - 1; Z ++){
                经纬度SRC = list.get(Z);
                经纬度DEST = list.get(Z + 1);
                行= myMap.addPolyline(新的PolylineOptions()
                        。新增(新经纬度(src.latitude,src.longitude)
                                新的经纬度(dest.latitude,dest.longitude))
                        .WIDTH(5)。颜色(Color.BLUE).geodesic(真));
            } * /        }赶上(例外五){
            e.printStackTrace();
        }
    }    私人列表&LT;&经纬度GT;德$ C $℃聚(字符串连接codeD){        清单&LT;&经纬度GT;聚=新的ArrayList&LT;&经纬度GT;();
        INT指数= 0,LEN = EN coded.length();
        INT纬度= 0,经度= 0;        而(指数&LT; LEN){
            INT B,移= 0,结果为0;
            做{
                B = EN coded.charAt(指数++) - 63;
                结果| =(B&安培; 0x1F的)LT;&LT;转移;
                移动+ = 5;
            }而(B&GT; = 0x20的);
            INT DLAT =((导致与放大器; 1)= 0〜(结果&GT;→1):?(导致与GT;→1));
            纬度+ = DLAT;            移= 0;
            结果= 0;
            做{
                B = EN coded.charAt(指数++) - 63;
                结果| =(B&安培; 0x1F的)LT;&LT;转移;
                移动+ = 5;
            }而(B&GT; = 0x20的);
            INT DLNG =((导致与放大器; 1)= 0〜(结果&GT;→1):?(导致与GT;→1));
            LNG + = DLNG;            的LatLng P =新的经纬度((((双)纬度/ 1E5))
                    (((双)LNG / 1E5)));
            poly.add(P);
        }        返回聚;
    }    @覆盖
    公共无效的onClick(查看为arg0){
        // TODO自动生成方法存根    }    / * @覆盖
    公共无效onMarkerDrag(标记标记){       //添加标记的经纬度经纬度中的一个ArrayList和它传递到循环
        的for(int i = 0; I&LT; arraylistoflatlng.size();我++){
             myMap.addPolyline(新的PolylineOptions()
            .addAll(arraylistoflatlng)
            .WIDTH(5)
            。颜色(Color.RED));
        }
        } * /
}

就是这样。你是好去。
干杯!

I have been trying for the last couple days to find a simple tutorial on this but it seems like there is no such thing as simple with google's API.
Here is what I know so far step 1 send http message using a url that will contain long and lat and API_Key step 2 get result and prasae it step 3 use the data to get what I need. I just can't seem to figure it out. If you could provide me an example or just anything on how to implement this API it would be great! My java file

package com.example.learnaboutme;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.commons.logging.Log;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Color;
import android.location.Location;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;

public class MainActivity extends FragmentActivity {

   Context[] context = new Context[1];
   GPS[] gps = new GPS[1];
   Home home = null;
   RelativeLayout[] rel = new RelativeLayout[1];
   XMLParase xmlParase = null;
   private GoogleMap myMap;
   Polyline line;

   Location location;

   // Static LatLng
   LatLng startLatLng = new LatLng(30.707104, 76.690749);
   LatLng endLatLng = new LatLng(30.721419, 76.730017);

   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);    
      this.setContentView(R.layout.activity_main);
      final TextView text = (TextView)this.findViewById(R.id.text);
      gps[0] = new GPS();
      gps[0].start(this); 
      home = new Home();
      context[0] = this;
      rel[0] = (RelativeLayout)findViewById(R.id.rel);
      home.Initalize(rel, context);
      xmlParase = new XMLParase();
      location = gps[0].GetCoor();
      myMap = ((SupportMapFragment) getSupportFragmentManager()
              .findFragmentById(R.id.mapk)).getMap();
      try{

          final LatLng PERTH = new LatLng(-31.90, 115.86);
          Marker perth = myMap.addMarker(new MarkerOptions()
                                    .position(PERTH)
                                    .anchor((float)0.5,(float)0.5)
                                    .rotation((float)90.0));

          String urlTopass = makeURL(startLatLng.latitude,
                  startLatLng.longitude, endLatLng.latitude,
                  endLatLng.longitude);
         // new connectAsyncTask(urlTopass).execute();

      }catch(Exception e){
          e.printStackTrace();
      }

      Timer timer = new Timer();
      final Handler handler = new Handler();
      timer.schedule(new TimerTask(){
          public void run(){
              handler.post(new Runnable(){
                  public void run()
                  { 
                      home.Check(gps);
                      String data = MainActivity.this.xmlParase.readXML("locations.xml", context[0], "Home", "address");
                      if(!data.equals("")) {
                         text.setText(data);
                      }
                  }
              });
          }
      }, 2000, 1000);
   }

   private class connectAsyncTask extends AsyncTask<Void, Void, String> {
       private ProgressDialog progressDialog;
       String url;

       connectAsyncTask(String urlPass) {
           url = urlPass;
       }

       @Override
       protected void onPreExecute() {
           // TODO Auto-generated method stub
           super.onPreExecute();
           progressDialog = new ProgressDialog(context[0]);
           progressDialog.setMessage("Fetching route, Please wait...");
           progressDialog.setIndeterminate(true);
           progressDialog.show();
       }

       @Override
       protected String doInBackground(Void... params) {
           JSONParser jParser = new JSONParser();
           String json = jParser.getJSONFromUrl(url);
           return json;
       }

       @Override
       protected void onPostExecute(String result) {
           super.onPostExecute(result);
           progressDialog.hide();
           if (result != null) {
               drawPath(result);
           }
       }
   }

   public String makeURL(double sourcelat, double sourcelog, double destlat,
           double destlog) {
       StringBuilder urlString = new StringBuilder();
       urlString.append("http://maps.googleapis.com/maps/api/directions/json");
       urlString.append("?origin=");// from
       urlString.append(Double.toString(sourcelat));
       urlString.append(",");
       urlString.append(Double.toString(sourcelog));
       urlString.append("&destination=");// to
       urlString.append(Double.toString(destlat));
       urlString.append(",");
       urlString.append(Double.toString(destlog));
       urlString.append("&sensor=false&mode=driving&alternatives=true");
       return urlString.toString();
   }

   public class JSONParser {

       InputStream is = null;
       JSONObject jObj = null;
       String json = "";

       // constructor
       public JSONParser() {
       }

       public String getJSONFromUrl(String url) {

           // Making HTTP request
           try {
               // defaultHttpClient
               DefaultHttpClient httpClient = new DefaultHttpClient();
               HttpPost httpPost = new HttpPost(url);

               HttpResponse httpResponse = httpClient.execute(httpPost);
               HttpEntity httpEntity = httpResponse.getEntity();
               is = httpEntity.getContent();

           } catch (UnsupportedEncodingException e) {
               e.printStackTrace();
           } catch (ClientProtocolException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           }
           try {
               BufferedReader reader = new BufferedReader(
                       new InputStreamReader(is, "iso-8859-1"), 8);
               StringBuilder sb = new StringBuilder();
               String line = null;
               while ((line = reader.readLine()) != null) {
                   sb.append(line + "\n");
               }

               json = sb.toString();
               is.close();
           } catch (Exception e) {
           }
           return json;

       }
   }

   public void drawPath(String result) {
       if (line != null) {
           myMap.clear();
       }
       myMap.addMarker(new MarkerOptions().position(endLatLng).icon(
               BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
       myMap.addMarker(new MarkerOptions().position(startLatLng).icon(
               BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
       try {
           // Tranform the string into a json object
           final JSONObject json = new JSONObject(result);
           JSONArray routeArray = json.getJSONArray("routes");
           JSONObject routes = routeArray.getJSONObject(0);
           JSONObject overviewPolylines = routes
                   .getJSONObject("overview_polyline");
           String encodedString = overviewPolylines.getString("points");
           List<LatLng> list = decodePoly(encodedString);

           PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true);
           for (int z = 0; z < list.size(); z++) {
               LatLng point = list.get(z);
               options.add(point);
           }
           line = myMap.addPolyline(options);

           /*for (int z = 0; z < list.size() - 1; z++) {
               LatLng src = list.get(z);
               LatLng dest = list.get(z + 1);
               line = myMap.addPolyline(new PolylineOptions()
                       .add(new LatLng(src.latitude, src.longitude),
                               new LatLng(dest.latitude, dest.longitude))
                       .width(5).color(Color.BLUE).geodesic(true));
           }*/

       } catch (Exception e) {
           e.printStackTrace();
       }
   }

   private List<LatLng> decodePoly(String encoded) {

       List<LatLng> poly = new ArrayList<LatLng>();
       int index = 0, len = encoded.length();
       int lat = 0, lng = 0;

       while (index < len) {
           int b, shift = 0, result = 0;
           do {
               b = encoded.charAt(index++) - 63;
               result |= (b & 0x1f) << shift;
               shift += 5;
           } while (b >= 0x20);
           int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
           lat += dlat;

           shift = 0;
           result = 0;
           do {
               b = encoded.charAt(index++) - 63;
               result |= (b & 0x1f) << shift;
               shift += 5;
           } while (b >= 0x20);
           int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
           lng += dlng;

           LatLng p = new LatLng((((double) lat / 1E5)),
                   (((double) lng / 1E5)));
           poly.add(p);
       }

       return poly;
   }


   public boolean onCreateOptionsMenu(Menu var1) {
      this.getMenuInflater().inflate(R.menu.main, var1);
      return true;
   }
}

my xml file

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:id="@+id/rel" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:id="@+id/text" />
    <fragment 
        android:id="@+id/mapk"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"/> 

</RelativeLayout>

the errors I am gettting are

01-10 16:47:16.283: W/ActivityThread(8390): Application com.example.learnaboutme is waiting for the debugger on port 8100...
01-10 16:47:16.303: I/System.out(8390): Sending WAIT chunk
01-10 16:47:16.503: I/System.out(8390): Debugger has connected
01-10 16:47:16.503: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:16.703: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:16.904: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:17.104: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:17.304: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:17.504: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:17.704: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:17.905: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:18.105: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:18.305: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:18.505: I/System.out(8390): waiting for debugger to settle...
01-10 16:47:18.706: I/System.out(8390): debugger has settled (1424)
01-10 16:51:07.610: W/dalvikvm(8390): threadid=1: thread exiting with uncaught exception (group=0x410789d8)
01-10 16:51:07.680: E/AndroidRuntime(8390): FATAL EXCEPTION: main
01-10 16:51:07.680: E/AndroidRuntime(8390): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.learnaboutme/com.example.learnaboutme.MainActivity}: android.view.InflateException: Binary XML file line #18: Error inflating class fragment
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1960)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.os.Looper.loop(Looper.java:137)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.ActivityThread.main(ActivityThread.java:4477)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at java.lang.reflect.Method.invokeNative(Native Method)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at java.lang.reflect.Method.invoke(Method.java:511)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at dalvik.system.NativeStart.main(Native Method)
01-10 16:51:07.680: E/AndroidRuntime(8390): Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class fragment
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:262)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.Activity.setContentView(Activity.java:2071)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.example.learnaboutme.MainActivity.onCreate(MainActivity.java:61)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.Activity.performCreate(Activity.java:4701)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924)
01-10 16:51:07.680: E/AndroidRuntime(8390):     ... 11 more
01-10 16:51:07.680: E/AndroidRuntime(8390): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value.  Expected 4030500 but found 0.  You must have the following declaration within the <application> element:     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.common.GooglePlayServicesUtil.n(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.maps.internal.q.v(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.maps.internal.q.u(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.maps.SupportMapFragment$b.cE(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.maps.SupportMapFragment$b.a(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.dynamic.a.a(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.dynamic.a.onInflate(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:290)
01-10 16:51:07.680: E/AndroidRuntime(8390):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
01-10 16:51:07.680: E/AndroidRuntime(8390):     ... 21 more

解决方案

Here is reference for all you need ..

https://developers.google.com/places/documentation/ AND https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapFragment

And you can use same some thing like undermentioned ..

Check this simple class that implements all you need

public class MainActivity extends FragmentActivity implements OnClickListener {

    private GoogleMap myMap;
    Polyline line;
    Context context;

    Location location;
    boolean check_provider_enabled = false;

    // Static LatLng
    LatLng startLatLng = new LatLng(30.707104, 76.690749);
    LatLng endLatLng = new LatLng(30.721419, 76.730017);

    public void onCreate(Bundle bd) {
        super.onCreate(bd);
        setContentView(R.layout.activity_main);
        context = MainActivity.this;



        // GoogleMap myMap
        myMap = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map)).getMap();

        /*
        // Construct a CameraPosition focusing on Mountain View and animate the camera to that position.
        CameraPosition cameraPosition = new CameraPosition.Builder()
            //.target(endLatLng)      // Sets the center of the map to Mountain View
            .zoom(17)                   // Sets the zoom
            .bearing(90)                // Sets the orientation of the camera to east
            .tilt(30)                   // Sets the tilt of the camera to 30 degrees
            .build();                   // Creates a CameraPosition from the builder
        myMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));*/

        myMap.setMyLocationEnabled(true);
        myMap.moveCamera(CameraUpdateFactory.newLatLng(startLatLng));
        myMap.animateCamera(CameraUpdateFactory.zoomTo(12));

        myMap.getUiSettings().setZoomControlsEnabled(false);







        LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
        boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);
        location = service.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        // check if enabled and if not send user to the GSP settings
        // Better solution would be to display a dialog and suggesting to 
        // go to the settings
        if (!enabled) {
          /*Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
          startActivity(intent);*/
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent);
            Toast.makeText(getApplicationContext(), "Enable GPS servcies to use this app.", Toast.LENGTH_LONG).show();
        } else{



            try{

                final LatLng PERTH = new LatLng(-31.90, 115.86);
                Marker perth = myMap.addMarker(new MarkerOptions()
                                          .position(PERTH)
                                          .anchor((float)0.5,(float)0.5)
                                          .rotation((float)90.0));

                String urlTopass = makeURL(startLatLng.latitude,
                        startLatLng.longitude, endLatLng.latitude,
                        endLatLng.longitude);
               // new connectAsyncTask(urlTopass).execute();

            }catch(Exception e){
                e.printStackTrace();
            }

        }

       /* if (myMap!=null){
            Marker hamburg = myMap.addMarker(new MarkerOptions().position(startLatLng)
                .title("Hamburg"));
            Marker kiel = myMap.addMarker(new MarkerOptions()
                .position(endLatLng)
                .title("Vivek")
                .snippet("VIVEK's ANDROID HACKER")
                .icon(BitmapDescriptorFactory
                    .fromResource(R.drawable.one)));
          }*/



        // Now auto clicking the button
       // btntemp.performClick();
    }
/*
    @Override
    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.btn_pass_home_call_temp:
            String urlTopass = makeURL(startLatLng.latitude,
                    startLatLng.longitude, endLatLng.latitude,
                    endLatLng.longitude);
            new connectAsyncTask(urlTopass).execute();
            break;

        default:
            break;
        }

    }*/

    private class connectAsyncTask extends AsyncTask<Void, Void, String> {
        private ProgressDialog progressDialog;
        String url;

        connectAsyncTask(String urlPass) {
            url = urlPass;
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            progressDialog = new ProgressDialog(context);
            progressDialog.setMessage("Fetching route, Please wait...");
            progressDialog.setIndeterminate(true);
            progressDialog.show();
        }

        @Override
        protected String doInBackground(Void... params) {
            JSONParser jParser = new JSONParser();
            String json = jParser.getJSONFromUrl(url);
            return json;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            progressDialog.hide();
            if (result != null) {
                drawPath(result);
            }
        }
    }

    public String makeURL(double sourcelat, double sourcelog, double destlat,
            double destlog) {
        StringBuilder urlString = new StringBuilder();
        urlString.append("http://maps.googleapis.com/maps/api/directions/json");
        urlString.append("?origin=");// from
        urlString.append(Double.toString(sourcelat));
        urlString.append(",");
        urlString.append(Double.toString(sourcelog));
        urlString.append("&destination=");// to
        urlString.append(Double.toString(destlat));
        urlString.append(",");
        urlString.append(Double.toString(destlog));
        urlString.append("&sensor=false&mode=driving&alternatives=true");
        return urlString.toString();
    }

    public class JSONParser {

        InputStream is = null;
        JSONObject jObj = null;
        String json = "";

        // constructor
        public JSONParser() {
        }

        public String getJSONFromUrl(String url) {

            // Making HTTP request
            try {
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(is, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }

                json = sb.toString();
                is.close();
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }
            return json;

        }
    }

    public void drawPath(String result) {
        if (line != null) {
            myMap.clear();
        }
        myMap.addMarker(new MarkerOptions().position(endLatLng).icon(
                BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
        myMap.addMarker(new MarkerOptions().position(startLatLng).icon(
                BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
        try {
            // Tranform the string into a json object
            final JSONObject json = new JSONObject(result);
            JSONArray routeArray = json.getJSONArray("routes");
            JSONObject routes = routeArray.getJSONObject(0);
            JSONObject overviewPolylines = routes
                    .getJSONObject("overview_polyline");
            String encodedString = overviewPolylines.getString("points");
            List<LatLng> list = decodePoly(encodedString);

            PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true);
            for (int z = 0; z < list.size(); z++) {
                LatLng point = list.get(z);
                options.add(point);
            }
            line = myMap.addPolyline(options);

            /*for (int z = 0; z < list.size() - 1; z++) {
                LatLng src = list.get(z);
                LatLng dest = list.get(z + 1);
                line = myMap.addPolyline(new PolylineOptions()
                        .add(new LatLng(src.latitude, src.longitude),
                                new LatLng(dest.latitude, dest.longitude))
                        .width(5).color(Color.BLUE).geodesic(true));
            }*/

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private List<LatLng> decodePoly(String encoded) {

        List<LatLng> poly = new ArrayList<LatLng>();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            LatLng p = new LatLng((((double) lat / 1E5)),
                    (((double) lng / 1E5)));
            poly.add(p);
        }

        return poly;
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

    }

    /*@Override
    public void onMarkerDrag(Marker marker) {

       //add the marker's latlng in a arraylist of LatLng and pass it to the loop
        for (int i = 0; i < arraylistoflatlng.size(); i++) {
             myMap.addPolyline(new PolylineOptions()
            .addAll(arraylistoflatlng)
            .width(5)
            .color(Color.RED));
        }
        }*/
}

That's it. You are good to go. Cheers!

这篇关于谷歌执行API地方的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆