1

I want to draw driving route between two location with two waypoints when I make the url for getdriving direction api it says

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

like this my gerdirection api url

So when I googled it said to use urlencoder when i use that in my url error is not thrown but my json is empty like this

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

plz do say me where i went wrong

my code

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

my 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;

    }
  }

say me if there any mistake in parsejson also

0

1 Answer 1

1

I think there is problem in your uri encoding.

For the direction uri, I used this code. Its works fine. Modify it according to your needs..

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;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.