OsmBonuspack - GeocoderNominatim :: getFromLocationName - 来自服务器的响应无效:HTTP / 1.1 403 Forbidden

时间:2016-02-02 10:39:12

标签: android geocoding osmdroid

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);
        }
    }
}

知道为什么我从服务器收到无效响应?

1 个答案:

答案 0 :(得分:2)

是:2015年6月,Nominatim改变了他们的使用政策,现在需要一个用户代理。

GeocoderNominatim构造函数evolved,并要求您设置用户代理。通常,类似于:“your_application / version”

您还可以查看GeocoderNominatim javadoc。

(我猜你使用的是旧版本的OSMBonusPack)