2017-02-09 4 views
0

ich SQLite in meinem Android App verwenden. Alles ist toll, aber wenn ich einen Standort in meiner Wetter-App hinzufüge und ihn dann wegwische, wird der Standort nicht aus der Tabelle entfernt.SQLite auf Android nicht Zeile entfernen

Hier bekomme ich die Orte, die Orte hinzufügen und entfernen.

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: Also hier ist das Problem. Ich versuche, die Zeile zu entfernen, aber wenn ich die Daten direkt von der Datenbank neu lade, wird sie nicht aktualisiert. Wenn ich also die Daten zur Datenbank hinzufüge und versuche, sie neu zu laden, wird sie auch nicht aktualisiert. Das Problem ist, dass es bei einer Datenbankänderung nicht aktualisiert wird, aber es aktualisiert, wenn ich die App neu starte.

Hier ist meine Github-Datenbank-Datei Link:

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

+0

Haben Sie eine Zeile löschen Methode in der DB-Klasse haben? –

+0

Nicht sicher Adam. Kannst du es für mich ausprobieren, ich bin neu in SQL Vielen Dank! – TSM

Antwort

0

Cursors sind temporäre Objekte und sollten nicht etwa für eine lange Zeit gehalten werden.

Auf jeden Fall ist die Position in der Cursor nicht notwendigerweise die gleiche wie die Position in der Liste, vor allem, nachdem Sie Änderungen vorgenommen haben, oder wenn Sie tun, Sortierung/Filterung. Speichern Sie die ID in der Liste und verwenden Sie diese, um später auf die Zeile zuzugreifen.

+0

Vielen Dank, aber nach einigen Refactoring hat es nicht funktioniert. Ich habe ein benutzerdefiniertes Objekt hinzugefügt, das den Namen, den Ort und die ID aus dem SQL enthält, aber wenn ich es entfernte, funktioniert es immer noch nicht. Kannst du dir meine SQL- und MainActivity-Klassen ansehen - Methoden "removeSQLLocation". Auf meinem GitHub https://github.com/tsmadm/Stormy-WeatherApp/tree/SQL/app/src/main/java/com/tsm/stormy/SQL – TSM

+0

Auch wenn ich die app neu starten, entfernt es den Standort .. . – TSM