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 版本)