2017-02-09 5 views
0

私はAndroidアプリでSQLiteを使用しています。すべてが素晴らしいですが、天気アプリに場所を追加してからスワイプしても、その場所はTABLEから削除されません。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; 

} 

EDIT 1:ここに問題があります。私は行を削除しようとするが、データベースから直接データをリロードすると、更新されない。したがって、データをデータベースに追加してリロードしようとすると、リフレッシュされません。問題は、データベースの変更では更新されませんが、アプリケーションを再起動すると更新されます。

は、ここに私のgithubのデータベースファイルのリンクです:

https://github.com/tsmadm/Stormy-WeatherApp/tree/SQL/app/src/main/java/com/tsm/stormy/SQL

+0

DBクラスに行削除メソッドがありますか? –

+0

アダムあなたは私のためにそれをチェックすることができます、私はSQLのおかげで多くの新しいです! – TSM

答えて

0

カーソルが一時的なオブジェクトであり、長い時間のために周りのままにしてはいけません。

とにかく、カーソルの位置は、特に変更した後、またはソート/フィルタリングを行っているときに、リスト内の位置と必ずしも同じではありません。 IDをリストに格納し、それを使用して後で行にアクセスします。

+0

ありがとう、しかし、いくつかのリファクタリングの後、動作しませんでした。 SQLから名前、位置、およびIDを保持するカスタムオブジェクトを追加しましたが、削除してもまだ機能しません。あなたは私のSQLとMainActivityクラスを見てみることができますか?メソッド "removeSQLLocation"。私のgithubでhttps://github.com/tsmadm/Stormy-WeatherApp/tree/SQL/app/src/main/java/com/tsm/stormy/SQL – TSM

+0

また私は、アプリケーションを再起動すると、場所を削除します.. 。 – TSM

関連する問題