【问题标题】:PolyUtil.decode Throwing StringIndexOutOfBoundsExceptionPolyUtil.decode 抛出 StringIndexOutOfBoundsException
【发布时间】:2019-08-30 03:58:19
【问题描述】:

当使用谷歌地图 PolyUtil.decode 它给我这个错误java.lang.StringIndexOutOfBoundsException: length=60; index=60 at java.lang.String.charAt(Native Method) at com.google.maps.android.PolyUtil.decode(PolyUtil.java:464) 当我跟踪错误时,它给了我 PolyUtil.class 然后将我带到这一特定行

do{
  b = encodedPath.charAt(index++) - 63 - 1;
  result += b << shift;
  shift += 5;
} while(b >= 31);

但到目前为止,此错误仅针对特定的编码字符串引发。当我解码另一个相同长度的字符或长度更长或更短的编码字符串时,它不会引发错误。我什至使用谷歌的交互式折线解码器工具测试了给出错误的字符串,它显示正确。发生此错误的任何原因?

【问题讨论】:

  • 你有什么解决办法吗?
  • 检查编码后的字符串是否有无效字符。在注意到缺少一些转义字符(例如\\n)后,我想通了。在我的情况下,编码字符串中的\n 引发了错误,但是当我将其更改为\\n 时,它能够正确解码。
  • mc}r@ejvtMC\\\\XfAv@zDrAvGZ~ADVK?kBgJ{@iEi@kBQc@q@kAwAeCiAkBQEEAKEGIEM?KDOROR?LDBBN?pA?vBGv@Bp@FhBVxD@GXIJa@@uA ~@wEvCSv@(这是我的编码字符串的示例)它由转义斜杠组成。当我删除反斜杠时,它显示“StringIndexOutOfBoundsException”并且绘制的路径很奇怪。不画过马路。并非在所有情况下都如此。
  • 我建议您重新绘制线条以确保它正确,复制它然后将其重新粘贴回工具中以确保它是绘制的内容。然后将该编码字符串保存在某处,然后将其粘贴到 PolyUtil 解码中。也许在途中的某个地方发生了一些事情。如果新字符串仍然出现错误,请将其粘贴到此处,我会检查它。

标签: android google-maps google-polyline polylineoptions


【解决方案1】:

问题是双反斜杠“\\”。只需在解码之前用一个反斜杠“\”替换它们。
如下:

String newEncodedString = encodedString.replace("\\\\","\\");
PolyUtil.decode(newEncodedString);

【讨论】:

    【解决方案2】:
        try {
           PolyUtil.decode(encodedFullPath)
        } catch (e: Exception) {
           val modifiedEncodedPath = "$encodedFullPath@"
            PolyUtil.decode(modifiedEncodedPath)
        }
    
    fix for some encoded paths, used by:
    https://developers.google.com/maps/documentation/utilities/polylineutility
    
    
    explanation can be found here
    https://developers.google.com/maps/documentation/utilities/polylinealgorithm
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2021-06-17
      • 2016-05-21
      • 1970-01-01
      • 2012-01-15
      • 2014-09-26
      • 2014-09-14
      相关资源
      最近更新 更多