Java Android上的SQLite未删除行

Java Android上的SQLite未删除行,java,android,sql,sqlite,Java,Android,Sql,Sqlite,我在Android应用程序中使用SQLite。一切都很好,但当我在天气应用程序中添加一个位置,然后将其刷走时,它不会从表中删除该位置 在这里,我获取位置,添加位置并删除它 public TreeMap<String, LatLng> getSQLLocations() { TreeMap<String, LatLng> locations = new TreeMap<>(); for (int i =0; i < mCursor.getC

我在Android应用程序中使用SQLite。一切都很好,但当我在天气应用程序中添加一个位置,然后将其刷走时,它不会从表中删除该位置

在这里,我获取位置,添加位置并删除它

public TreeMap<String, LatLng> getSQLLocations() {
    TreeMap<String, LatLng> locations = new TreeMap<>();
    for (int i =0; i < mCursor.getCount(); i++) {
        mCursor.moveToPosition(i);
        String name = mCursor.getString(mCursor.getColumnIndex(WeatherContract.WeatherEntry.COLUMN_LOCATION_NAME));
        double lat = mCursor.getDouble(mCursor.getColumnIndex(WeatherContract.WeatherEntry.COLUMN_LAT));
        double lon = mCursor.getDouble(mCursor.getColumnIndex(WeatherContract.WeatherEntry.COLUMN_LONG));
        LatLng latLng = new LatLng(lat, lon);
        locations.put(name, latLng);

    }
    return locations;
}

public boolean removeSQLLocation(int position) {
    mCursor.moveToPosition(position);
    long id = mCursor.getLong(mCursor.getColumnIndex(WeatherContract.WeatherEntry._ID));

     boolean deleted = mDb.delete(WeatherContract.WeatherEntry.TABLE_NAME, WeatherContract.WeatherEntry._ID + "="
            + id, null) > 0;
    return deleted;
}

public long addSQLLocation(String name, LatLng latLng) {
    double lat = latLng.latitude;
    double lon = latLng.longitude;
    ContentValues cv = new ContentValues();
    cv.put(WeatherContract.WeatherEntry.COLUMN_LOCATION_NAME, name);
    cv.put(WeatherContract.WeatherEntry.COLUMN_LAT, lat);
    cv.put(WeatherContract.WeatherEntry.COLUMN_LONG, lon);
    long ret = mDb.insert(WeatherContract.WeatherEntry.TABLE_NAME, null, cv);
    refreshLocationNames();
    return ret;

}
公共树映射getSQLLocations(){ 树映射位置=新树映射(); 对于(int i=0;i0; 返回已删除; } 公共长addSQLLocation(字符串名称,LatLng LatLng){ 双纬度=纬度; 双经度=经度; ContentValues cv=新的ContentValues(); cv.put(WeatherContract.WeatherEntry.COLUMN\u LOCATION\u NAME,NAME); cv.put(WeatherContract.WeatherEntry.COLUMN_LAT,LAT); cv.put(WeatherContract.WeatherEntry.COLUMN_LONG,lon); long ret=mDb.insert(WeatherContract.WeatherEntry.TABLE_NAME,null,cv); refreshLocationNames(); 返回ret; } 编辑1:问题出在这里。我试图删除该行,但当我直接从数据库重新加载数据时,它不会刷新。因此,当我将数据添加到数据库并尝试重新加载时,它也不会刷新。问题是它不会在数据库更改时刷新,但在我重新启动应用程序时会刷新。

以下是我的github数据库文件链接:


游标是临时对象,不应长时间保留

无论如何,光标中的位置不一定与列表中的位置相同,尤其是在进行更改后,或者在进行排序/筛选时。
将ID存储在列表中,以后使用该ID访问该行。

您的DB类中是否有delete row方法?不确定。你能帮我查一下吗,我是SQL新手,非常感谢!非常感谢,但经过一些重构后,它没有工作。我添加了一个自定义对象,它保存了SQL中的名称、位置和id,但是当我删除它时,它仍然不起作用。你能看看我的SQL和MainActivity类-方法“removeSQLLocation”吗。在我的github上