嗨所以我的问题是iv创建一个Android项目,它获取用户当前的纬度和经度,然后使用SQLite数据库在那个位置给它们风速。
我的数据库由4列组成,这些列都是字符串值,其中第1列是ID,第二列是WindSpeed,第三列是经度,第四列是纬度。
我的问题是什么,我需要找到数据库中用户当前位置的最近位置,我已经问过这个问题并且有一个答案,但我不确定它是否正确,如果是正确实施则是b我做错了什么因为我完全陷入困境并开始恐慌
我认为问题可能在于Where子句,但我可能错了。
这是代码
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "WindSpeedDB.sqlite";
private static final int DATABASE_VERSION = 1;
private static final String LAT_VAL = "Latitude";
private static final String LONG_VAL = "Longitude";
private static final String WIND_SPEED = "WindSpeed";
private static final String ROW_ID= " ID";
double Lat= 52.9318635;
double Long= 0.6692808;
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public Double getWindSpeed2(){
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String [] sqlSelect = {WIND_SPEED,LAT_VAL,LONG_VAL};
String sqlTables = "WindSpeed";
String whereClause = " ? BETWEEN "+LAT_VAL+" - 1 and "+LAT_VAL+" + 1 and ? BETWEEN "+LONG_VAL+" - 1 and "+LONG_VAL+" + 1";
String[] whereArgs = new String[] {
String.valueOf(Lat),
String.valueOf(Long)};
qb.setTables(sqlTables);
Cursor d = qb.query(db, sqlSelect, whereClause, whereArgs, null, null, null);
Double wind_speed= 0.0;
double min_distance=999999;
if (d != null && d.moveToFirst()){
double lat_v=Double.parseDouble(d.getString(2));
double long_v=Double.parseDouble(d.getString(3));
double dis=Math.sqrt( (lat_v-Lat)*(lat_v-Lat) + (long_v-Long)*(long_v-Long) );
if (dis<min_distance){
wind_speed=Double.parseDouble(d.getString(1));
}
}
return wind_speed;
}
}
问题是这总是给我一个0.0的结果,我相信它在风速下传递一个空值,因此它没有找到数据库中的值,即使lat和long im的值是一个在数据库等应该给出那个地方的风速。
任何帮助都会非常受欢迎,因为我可笑地被卡住了!
答案 0 :(得分:0)
游标的列访问函数使用从零开始的索引;你必须阅读第0,1和2列。
游标可能会返回多行;将if
替换为while
。
永远不要将数字存储为字符串;在比较中,字符串大于任何数字。
query
永远不会返回null
;你可以放弃d != null
支票。