2017-05-19 189 views
0

我想有两个航点绘制两个位置之间的行车路线时,我做的URL getdriving方向API,它说java.lang.IllegalArgumentException异常:

Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 133 but the url gives json 

这样my gerdirection api url:在指数133查询非法字符

所以,当我GOOGLE了它说当我使用的是在我的网址没有引发错误,使用URLEncoder的,但我的JSON是空这样

error_message "Invalid request. Missing the 'origin' parameter." 
routes 
status "INVALID_REQUEST" 

PLZ你说我哪里出了错

我的代码

public String getMapsApiDirectionsUrl() { 
    final LatLng source = new LatLng(dsla, dslo); 
    final LatLng path1 = new LatLng(dp1la, dp2lo); 
    final LatLng path2=new LatLng(dp2la,dp2lo); 
    final LatLng dest = new LatLng(ddla, ddlo); 
    String origin = "origin=" + source.latitude + "," + source.longitude; 
    String waypoints = "waypoints=optimize:true"+"|"+ path1.latitude + ","+ path1.longitude +"|"+ path2.latitude +","+ path2.longitude ; 
    String destination = "destination=" + dest.latitude + "," + dest.longitude; 
    String way="",sour="",desty=""; 
    try { 
     way = URLEncoder.encode(waypoints, "UTF-8"); 
     desty = URLEncoder.encode(destination, "UTF-8"); 
    sour = URLEncoder.encode(origin, "UTF-8"); 
    }catch (UnsupportedEncodingException e) { 

    } 
    String key = "AIzaSyDOidVs6_dHl0cjEJ0-OhMfUY0oNFf1SOE "; 
    String params = origin+ "&" + destination+ "&" + waypoints +"&"+key; 
    String output = "json"; 

    // String url1="https://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA&key=YOUR_API_KEY"; 
    String url = "https://maps.googleapis.com/maps/api/directions/" 
      +output + "?" +params; 
    Log.d("taqg",url); 
    return url; 
} 

我parsejson

public class JSONParser { 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 
String results=""; 
// constructor 


public String getJSONFromUrl(final String url) { 
    class GetDataJSON extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... params) { 

      // 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 (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; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
     results=json; 
      Log.d("tag",results); 
     } 
    } 
    GetDataJSON g = new GetDataJSON(); 
    g.execute(); 

    return results; 

    } 
    } 

说我,如果有在parsejson任何错误也

回答

0

我觉得有问题,你uri编码。

对于uri的指示,我使用了这段代码。它的工作很好。根据您的需要修改它..

private String getDirectionsUrl(LatLng origin,LatLng dest){ 
    // Origin of route 
    String str_origin = "origin="+origin.latitude+","+origin.longitude; 
    // Destination of route 
    String str_dest = "destination="+dest.latitude+","+dest.longitude; 
    // Sensor enabled 
    String sensor = "sensor=false"; 
    // Building the parameters to the web service 
    String parameters = str_origin+"&"+str_dest+"&"+sensor; 
    // Output format 
    String output = "json"; 
    return "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; 
} 
+0

不,我使用航点这个网址不支持航点 –

相关问题