我设法使用GeoCoder获取城市名称,但有时GPS会返回GetLocality无法识别的值(返回“null”)。我认为最好的解决方案是获取最近的城市名称。谁能告诉我请该怎么做。或者,如果有另一种方法可以解决它,那就没关系。
public void getCityName(double dLatitude, double dLongitude) throws IOException{
Geocoder gcd = new Geocoder(this, Locale.getDefault());
List<Address> addresses = gcd.getFromLocation(dLatitude, dLongitude, 1);
TextView cityname = (TextView)findViewById(R.id.city_name);
if (addresses.size() > 0) {
cityname.setText( "" +addresses.get(0).getLocality() + "," + addresses.get(0).getCountryName() );
}
}
答案 0 :(得分:0)
你可以这样使用。
ProgressDialog dialog=null;
@Override
public void onClick(View v) {
dialog = ProgressDialog.show(context, "", "Please! Wait...", true);
GetCurrentAddress result = new GetCurrentAddress();
result.execute("");
}
// getting address task
private class GetCurrentAddress extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String responseText = null;
String googleurl = "http://maps.google.com/maps/geo?";
String latitude="38.89";
String longitude ="-77.03";
StringBuilder sbuilder=new StringBuilder();
sbuilder.append(googleurl);
sbuilder.append("q="+latitude+","+longitude);
sbuilder.append("&output=responseText&sensor=true");
String url=sbuilder.toString();
try {
DefaultHttpClient httpclient=new DefaultHttpClient();
HttpPost httppost=new HttpPost(url);
HttpResponse httpresponse=httpclient.execute(httppost);
HttpEntity httpentity=httpresponse.getEntity();
InputStream is=httpentity.getContent();
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");
}
is.close();
responseText=sb.toString();
}
catch(ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return responseText;
}
@Override
protected void onPostExecute(String resultString) {
dialog.dismiss();
String response= resultString;
if (responseText != null) {
Log.v(TAG, "json response is:" + response);
try {
jObj = new JSONObject(response);
jsonarray = jObj.getJSONArray("Placemark");
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject innerJsonobject = jsonarray.getJSONObject(i);
String jsonaddress = innerJsonobject
.getString("address");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}