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

10-04 17:37