OsmBonuspack - GeocoderNominatim::getFromLocationName - 来自服务器的无效响应:HTTP/1.1 403 Forbidden
OsmBonuspack - GeocoderNominatim::getFromLocationName - Invalid response from server: HTTP/1.1 403 Forbidden
我的 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)
我的异步任务:
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,并要求您设置您的用户代理。通常,类似于:"your_application/version"
您还可以查看 GeocoderNominatim javadoc。
(我猜你使用的是相当旧的 OSMBonusPack 版本)
我的 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)
我的异步任务:
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,并要求您设置您的用户代理。通常,类似于:"your_application/version"
您还可以查看 GeocoderNominatim javadoc。
(我猜你使用的是相当旧的 OSMBonusPack 版本)