2017-05-19 83 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

不,我使用航點這個網址不支持航點 –

相關問題