我的 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() 但我不确定它是否能解决问题。
有人知道双精度如何在转换为字符串时生成“*”吗?