我的Android应用程序崩溃是由于SQL查询字符串构造中的异常行为。这是错误:

Caused by: android.database.sqlite.SQLiteException: near ")": syntax error: , while
compiling: SELECT [...], (0.6773931613745379*coslat*(coslng*0.9999276712889913
+sinlng*0.012027143*)+0.7356211694364222*sinlat) [...]


错误恰恰来自这里:sinlng*0.012027143*)
此字符串由以下功能构建:

public static String buildDistanceQuery(double latitude, double longitude) {
    final double coslat = Math.cos(MathUtils.deg2rad(latitude));
    final double sinlat = Math.sin(MathUtils.deg2rad(latitude));
    final double coslng = Math.cos(MathUtils.deg2rad(longitude));
    final double sinlng = Math.sin(MathUtils.deg2rad(longitude));
    return "(" + coslat + "*" + LocationColumns.COSLAT
            + "*(" + LocationColumns.COSLNG + "*" + coslng
            + "+" + LocationColumns.SINLNG + "*" + sinlng
            + ")+" + sinlat + "*" + LocationColumns.SINLAT
            + ")";
}


如您所见,LocationColumns.SINLNG + "*" + sinlng + ")"变为sinlng*0.012027143*),我真的不知道这怎么可能,因为sinlng是双倍的...

我无法重现该问题,崩溃来自Android Market控制台,我没有所有上下文。这不是唯一的崩溃,我发生过多次。

我可以尝试使用StringBuilder(),但不确定它是否可以解决此问题。

有人知道当double转换为String时如何生成“ *”吗?

最佳答案

我不确定为什么,但是coslng前面有一个缺少的“(”,可以检查吗?

编辑:感谢您修复它,有一种方法可以只打印或检查所生成的字符串,以检查*是否已经出现在其中,或者刚建立查询之后?并检查双精度sinlng是否匹配0.012027143。

不知道这将如何帮助,但它是一个开始:)

10-07 22:26