问题
here is my code
public static JSONObject getLocationInfo(String address) {
StringBuilder stringBuilder = new StringBuilder();
try {
// address = address.replaceAll(" ","%20");
HttpPost httppost = new HttpPost("http://maps.google.com/maps/api/geocode/json?address=" + address + "&sensor=false");
HttpClient client = new DefaultHttpClient();
HttpResponse response;
stringBuilder = new StringBuilder();
response = client.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
int b;
while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject = new JSONObject(stringBuilder.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonObject;
}
I am getting a json exception , at the response . please tell me a valid url . Also I did mapview (api key and android manifest permission) for gps.
Logcat:
04-03 16:35:20.548: E/CheckinTask(202): java.net.UnknownHostException: android.clients.google.com
04-03 16:35:20.548: E/CheckinTask(202): at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
04-03 16:35:20.548: E/CheckinTask(202): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
04-03 16:35:20.548: E/CheckinTask(202): at java.net.InetAddress.getAllByName(InetAddress.java:256)
04-03 16:35:20.548: E/CheckinTask(202): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
04-03 16:35:20.548: E/CheckinTask(202): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-03 16:35:20.548: E/CheckinTask(202): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-03 16:35:20.548: E/CheckinTask(202): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
04-03 16:35:20.548: E/CheckinTask(202): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
04-03 16:35:20.548: E/CheckinTask(202): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-03 16:35:20.548: E/CheckinTask(202): at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:248)
04-03 16:35:20.548: E/CheckinTask(202): at com.google.android.common.http.GoogleHttpClient.executeWithoutRewriting(GoogleHttpClient.java:203)
04-03 16:35:20.548: E/CheckinTask(202): at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:245)
04-03 16:35:20.548: E/CheckinTask(202): at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:313)
04-03 16:35:20.548: E/CheckinTask(202): at com.google.android.gsf.checkin.CheckinTask.sendRequest(CheckinTask.java:254)
04-03 16:35:20.548: E/CheckinTask(202): at com.google.android.gsf.checkin.CheckinTask.doInBackground(CheckinTask.java:150)
04-03 16:35:20.548: E/CheckinTask(202): at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:221)
04-03 16:35:20.548: E/CheckinTask(202): at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:214)
04-03 16:35:20.548: E/CheckinTask(202): at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-03 16:35:20.548: E/CheckinTask(202): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-03 16:35:20.548: E/CheckinTask(202): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-03 16:35:20.548: E/CheckinTask(202): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-03 16:35:20.548: E/CheckinTask(202): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-03 16:35:20.548: E/CheckinTask(202): at java.lang.Thread.run(Thread.java:1019)
回答1:
Try this:
private String getJSONFile(String URL) {
HttpGet httpGet = new HttpGet(URL);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse;
StringBuilder stringBuilder = new StringBuilder();
try {
httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
InputStream inputStream = httpEntity.getContent();
int c;
while ((c = inputStream.read()) != -1) {
stringBuilder.append((char) c);
}
} catch (Exception e) {
e.printStackTrace();
}
return stringBuilder.toString();
}
回答2:
At this point, I can see two main issues:
- You are not formatting the url to account for spaces and other non-url friendly characters.
- You are using a POST instead of a GET
As for number one, above, you can do this manually, or you can have it handled through java's URI class.
As for number two, above, you are also using the wrong method to call the URL. You should be using HttpGet instead of HttpPost.
You can test this out by using curl:
curl -X POST 'http://maps.google.com/maps/api/geocode/json?address=1600%20Pennsylvania%20Ave%20NW,%20Washington,%20DC&sensor=false'
The POST call above will give you and error, where as the GET method will not:
curl -X GET 'http://maps.google.com/maps/api/geocode/json?address=1600%20Pennsylvania%20Ave%20NW,%20Washington,%20DC&sensor=false'
Also, instead of using string builder to read the body contents, I find using apache's own IOUtil's class to be easier and more straightforward.
StringWriter writer = new StringWriter();
IOUtils.copy(response.getEntity().getContent(), writer);
However, you would have to import the library.
Finally, make sure you have given internet permission in your manifest.
回答3:
create URL like this,
String address = "yagnik+road,+rajkot";
and pass this below url to intent
http://maps.google.co.in/maps?q=+address
来源:https://stackoverflow.com/questions/9991616/how-to-get-parse-url-in-google-map-to-get-the-details-about-location-and-neighbo