SQLクエリ文字列構造の奇妙な動作が原因でAndroidアプリケーションがクラッシュしました。エラーは次のとおりです。
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
+ ")";
}
ご覧のとおり、sinlngは二重であるため、これがどのように可能にLocationColumns.SINLNG + "*" + sinlng + ")"
なるsinlng*0.012027143*)
かはわかりません...
問題を再現できません。クラッシュはAndroidマーケットコンソールから発生し、すべてのコンテキストがありません。これはユニークなクラッシュではなく、何度も発生しました。
StringBuilder()を使用してみることができますが、問題が修正されるかどうかはわかりません。
誰かが文字列に変換されたときにdoubleが「*」を生成する方法の手がかりを持っていますか?