代码之家  ›  专栏  ›  技术社区  ›  Thracian

地理编码器返回长度为零的地址

  •  7
  • Thracian  · 技术社区  · 8 年前

    this code 和新的 code 从带有FusedLocationProviderClient的Google(这是官方代码)中,它还返回长度为零的字符串。 This link Android官方页面展示了如何使用intent服务获取它。

    我在安卓5.1上得到了完整地址,但在安卓7.1上它返回一个长度为零的地址。

    我以前使用的代码,直到今天都运行良好。

    private void getAddressFromCoordinates() {
    
        new AsyncTask<Void, String, Void>() {
    
            @Override
            protected Void doInBackground(Void... params) {
    
                try {
                    addresses.clear();
                    addresses.addAll(geocoder.getFromLocation(mCurrentLocation.getLatitude(),
                            mCurrentLocation.getLongitude(), 1));
    
    
                } catch (IOException e) {
                    e.printStackTrace();
                    showToastAsync(getString(R.string.activity_loc_no_location_info));
                } catch (IllegalArgumentException illegalArgumentException) {
                    // Catch invalid latitude or longitude values.
                    showToastAsync("Invalid latitude or longitude values");
                }
    
                // Handle case where no address was found.
                if (addresses == null || addresses.size() == 0) {
                    showToastAsync(getString(R.string.activity_loc_no_address_is_found));
                } else {
                    Address address = addresses.get(0);
                    ArrayList<String> addressFragments = new ArrayList<String>();
                    for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                        addressFragments.add(address.getAddressLine(i));
                    }
    
                    addressInfo = TextUtils.join(System.getProperty("line.separator"), addressFragments);
                    addressSingleLine = LocationActivity.addressInfo.replaceAll("[\r\n]+", " ");
                }
                return null;
            }
    
        }.execute();
    }
    

    是要添加 = 为了使循环在Android 7上不检索长度为零的地址,在某些版本上不需要这样做。谷歌引用的Github页面上的代码也缺失

    2 回复  |  直到 8 年前
        1
  •  8
  •   David Bar    8 年前

    对于(int i=0;i<address.getMaxAddressLineIndex();i++)

    对于(int i=0;i<=地址。getMaxAddressLineIndex();i++) 因为getMaxAddressLineIndex返回最大的索引。

        2
  •  1
  •   Nicolás Carrasco-Stevenson ISURU    8 年前

    我刚才在我的代码中注意到了完全相同的问题。显然,这是API的一个变化,正如您在 documentation getMaxAddressLineIndex() :

    所以你需要改变你的 for DavidBar建议的回路