My GeocoderNominatim.getFromLocation()工作得很好。
现在我在GeocoderNominatim期间收到错误而没有改变任何内容!?
来自服务器的响应无效:HTTP / 1.1 403 Forbidden
我的Logcat输出:
02-02 11:15:31.570: D/BONUSPACK(25238): GeocoderNominatim::getFromLocationName:http://nominatim.openstreetmap.org/search?format=json&accept-language=de&addressdetails=1&limit=1&q=Bolivia
02-02 11:15:32.210: E/BONUSPACK(25238): Invalid response from server: HTTP/1.1 403 Forbidden
浏览器中的检查工作正常(http://nominatim.openstreetmap.org/search?format=json&accept-language=de&addressdetails=1&limit=1&q=Bolivia)
我的AsyncTask:
public class SearchGeocode extends AsyncTask<String, Integer, List<Address>> {
Context context = MainActivity.this;
GeocoderNominatim coderNominatim = new GeocoderNominatim(context);
ProgressDialog progressDialog;
String countryTitleString;
protected List<Address> doInBackground(String... countryTitle) {
int i = 0;
publishProgress(i);
countryTitleString = Arrays.toString(countryTitle);
List<Address> geoResults = null;
try {
geoResults = coderNominatim.getFromLocationName(countryTitleString, 1);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(context, "Geocoding error! Internet available?", Toast.LENGTH_SHORT).show();
}
return geoResults;
}
protected void onProgressUpdate(Integer... progress) {
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setCancelable(true);
progressDialog.setMessage("Loading ...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setProgress(0);
progressDialog.show();
}
protected void onPostExecute(List<Address> geoResults) {
super.onPostExecute(geoResults);
progressDialog.hide();
if (geoResults.size() == 0) { //if no address found, display an error
Toast.makeText(context, countryTitleString +" - Country not found.", Toast.LENGTH_SHORT).show();
} else {
Address address = geoResults.get(0);
Bundle extras = address.getExtras();
BoundingBoxE6 bb = extras.getParcelable("boundingbox");
mapView.zoomToBoundingBox(bb);
//makeToast(countryTitle);
}
}
}
知道为什么我从服务器收到无效响应?
答案 0 :(得分:2)
是:2015年6月,Nominatim改变了他们的使用政策,现在需要一个用户代理。
GeocoderNominatim构造函数evolved,并要求您设置用户代理。通常,类似于:“your_application / version”
您还可以查看GeocoderNominatim javadoc。
(我猜你使用的是旧版本的OSMBonusPack)