我的GeocoderNominatim.getFromLocation()工作正常。
现在,我在更改GeocoderNominatim的过程中得到了一个错误,而未进行任何更改!?
来自服务器的无效响应:HTTP / 1.1 403禁止
我的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);
}
}
}
知道为什么我会从服务器收到无效响应吗?
最佳答案
是:2015年6月,Nominatim更改了使用政策,现在需要用户代理。
因此,GeocoderNominatim构造器evolved,并要求您设置用户代理。通常,类似:“您的应用程序/版本”
您也可以查看GeocoderNominatim javadoc。
(我猜您正在使用相当旧的OSMBonusPack版本)