我的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。
不知道这将如何帮助,但它是一个开始:)