没有从SQlite数据库中删除项目

新手

在我的应用程序中,我将多个标记添加到地图上并保存在SQLite中,但是现在我想在点击该标记并选择“删除标记”时删除一个特定的标记,所以我要做的是:

在我的 LocationsDB.class

@Override
public void onCreate(SQLiteDatabase db) {
    String sql = "create table " + DATABASE_TABLE + " ( " +
                 FIELD_ROW_ID + " integer primary key autoincrement , " +
                 FIELD_LNG + " double , " +
                 FIELD_LAT + " double , " +
                 FIELD_ZOOM + " text , " +
                 FIELD_TITLE + " text , " +
                 FIELD_SNIPPET + " text , " +
                 " ) ";

    db.execSQL(sql);
}

public long insert(ContentValues contentValues){
    long rowID = mDB.insert(DATABASE_TABLE, null, contentValues);
    return rowID;
}

public int del(int id){
    int cnt = mDB.delete(DATABASE_TABLE, FIELD_ROW_ID+"="+id, null);
    return cnt;
}

然后在我的LocationsContentProvider.class

 public class LocationsContentProvider extends ContentProvider{

public static final String PROVIDER_NAME = "com.maps.locationsmaps.locations";
public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/locations" );
private static final int LOCATIONS = 1;
private static final UriMatcher uriMatcher ;

static {
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI(PROVIDER_NAME, "locations", LOCATIONS);
}

LocationsDB mLocationsDB;

@Override
public boolean onCreate() {
    mLocationsDB = new LocationsDB(getContext());
    return true;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    long rowID = mLocationsDB.insert(values);
    Uri _uri=null;
    if(rowID>0){
        _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
    }else {
        try {
            throw new SQLException("Failed to insert : " + uri);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return _uri;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
    String[] selectionArgs) {
    return 0;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    int cnt = 1;
    cnt = mLocationsDB.del(cnt);
    return cnt;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

    if(uriMatcher.match(uri)==LOCATIONS){
        return mLocationsDB.getAllLocations();
    }
    return null;
}

@Override
public String getType(Uri uri) {
    return null;
}
}

然后终于在我的MainActivity.class

public void onClick(DialogInterface arg0, int arg1) {
    marker.remove();
    LocationDeleteTask deleteTask = new LocationDeleteTask();
    deleteTask.execute();
        }
    })

....

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
}
class LocationInsertTask extends AsyncTask<ContentValues, Void, Void>{
    @Override
    protected Void doInBackground(ContentValues... contentValues) {
        getContentResolver().insert(LocationsContentProvider.CONTENT_URI, contentValues[0]);
        return null;
    }
}

private class LocationDeleteTask extends AsyncTask<Void, Void, Void>{

@Override
protected Void doInBackground(Void... params) {
   getContentResolver().delete(LocationsContentProvider.CONTENT_URI, null, null);
   return null;

最初在选择“删除标记”时有效,但是在返回到活动时,标记随后返回并且不会被删除?

不知道我在做什么错,所以希望有人可以帮助我吗?

经过

首先,当您从数据库中查询(获取)位置并将其作为标记添加到地图时,您需要跟踪标记数据库ID,也许ArrayList您没有包括这部分代码,但是我想您知道我的意思,

当您添加标记时,它返回的是标记ID(在地图上的ID)而不是db行的ID,因此arraylist或hashtable将是db处标记ID和行ID之间的映射器。

我会写一些代码片段,您可以弄清楚要插入和使用的位置

Hashtable <Integer, String> mapid_dbid = new Hashtable <Integer, String>()
private void populateMap(){
    while(some cursor loop){
        Marker marker = new Marker(... init from DB);
        int mapid = map.addMarker(marker);
        //mapid her is an ID generated for the marker once it's added to the map
        mapid_dbid.put(mapid, cursor.getString("row_id"));
    }
}

现在我们移到onClick(),您需要onMarkerClick从类OnMarkerClickListener中使用

将此侦听器添加到活动的mapview(可能在onCreate())。

@override
public boolean onMarkerClick (Marker marker){
    marker.remove();
    LocationDeleteTask deleteTask = new LocationDeleteTask();
    deleteTask.execute(marker.getId());
}

现在我们修改DeleteTask :(将1st Void更改为Integer),它是in-params类型。

private class LocationDeleteTask extends AsyncTask<Integer, Void, Void>{

    @Override
    protected Void doInBackground(Integer... params) {//note Void changed to Integer too
        //paramsnow params might be 1 or more, so in this case we sent 1 param, so we read it as params[0]
        //and it's the markers Map-id, we need to get the db-id from the hashtable.
        String dbId = mapid_dbid.get(params[0]);

        getContentResolver().delete(LocationsContentProvider.CONTENT_URI, null, new String[]{dbId});//pass dbid of the location to the delete, so it can be passed to db-delete
        return null;
    }
}//Task

现在是提供者,我们更改delete()方法:

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    int cnt = 1;
    cnt = mLocationsDB.del(selectionArgs[0]);
    return cnt;
}

我没有您所有的代码,因此您必须尝试找出应该怎么做才能使其适合您的代码,

主要思想是(从地图中)获取标记ID,并使用它获取位置的db-id,然后将其传递给deleteTask,后者将其传递给Provider,提供者会将其传递给sqlite助手。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

没有从SQlite数据库中删除项目

来自分类Dev

删除没有ID字段的sqlite数据库中的项目

来自分类Dev

SQLite数据库中的项目未在RecyclerView中删除

来自分类Dev

SQLite数据库中的项目未在RecyclerView中删除

来自分类Dev

如何从 ListView 和 SQLite 数据库中删除项目?

来自分类Dev

数据没有从数据库中删除

来自分类Dev

从sqlite数据库中删除所有表

来自分类Dev

没有信息存储在SQLite数据库中

来自分类Dev

没有从数据库中删除“ HttpDeleteWithBody”

来自分类Dev

Sqlite 数据库没有被创建

来自分类Dev

删除没有表的数据库

来自分类Dev

如何从数据库中删除项目

来自分类Dev

如何从数据库中删除项目?

来自分类Dev

从SQLite数据库中删除

来自分类Dev

如何从(SQLite)数据库加载的JTable中插入,更新和删除项目

来自分类Dev

每5分钟从SQLite数据库中删除不活动的项目(聊天)

来自分类Dev

是否可以同时从Sqlite数据库中的所有表中删除数据

来自分类Dev

是否可以同时从Sqlite数据库中的所有表中删除数据

来自分类Dev

没有获取数据库的所有项目

来自分类Dev

有没有更好的方法将项目预加载到数据库中?

来自分类Dev

从数据库中删除时,SQL逻辑错误或缺少数据库没有此类表

来自分类Dev

如果数据库中没有日期列,则在特定日期后自动删除数据库

来自分类Dev

sybase数据库中“没有数据复制”的释放空间已删除

来自分类Dev

如何从Xamarin中的SQLite数据库删除数据

来自分类Dev

数据未使用SQLite从数据库中删除

来自分类Dev

我无法删除Sqlite数据库中的数据

来自分类Dev

无法从Meteorjs中的Mongo数据库中删除项目

来自分类Dev

我如何从数据库中删除recyclerView中的项目

来自分类Dev

从数据库中删除项目 - Android Studio 中的 ListView

Related 相关文章

  1. 1

    没有从SQlite数据库中删除项目

  2. 2

    删除没有ID字段的sqlite数据库中的项目

  3. 3

    SQLite数据库中的项目未在RecyclerView中删除

  4. 4

    SQLite数据库中的项目未在RecyclerView中删除

  5. 5

    如何从 ListView 和 SQLite 数据库中删除项目?

  6. 6

    数据没有从数据库中删除

  7. 7

    从sqlite数据库中删除所有表

  8. 8

    没有信息存储在SQLite数据库中

  9. 9

    没有从数据库中删除“ HttpDeleteWithBody”

  10. 10

    Sqlite 数据库没有被创建

  11. 11

    删除没有表的数据库

  12. 12

    如何从数据库中删除项目

  13. 13

    如何从数据库中删除项目?

  14. 14

    从SQLite数据库中删除

  15. 15

    如何从(SQLite)数据库加载的JTable中插入,更新和删除项目

  16. 16

    每5分钟从SQLite数据库中删除不活动的项目(聊天)

  17. 17

    是否可以同时从Sqlite数据库中的所有表中删除数据

  18. 18

    是否可以同时从Sqlite数据库中的所有表中删除数据

  19. 19

    没有获取数据库的所有项目

  20. 20

    有没有更好的方法将项目预加载到数据库中?

  21. 21

    从数据库中删除时,SQL逻辑错误或缺少数据库没有此类表

  22. 22

    如果数据库中没有日期列,则在特定日期后自动删除数据库

  23. 23

    sybase数据库中“没有数据复制”的释放空间已删除

  24. 24

    如何从Xamarin中的SQLite数据库删除数据

  25. 25

    数据未使用SQLite从数据库中删除

  26. 26

    我无法删除Sqlite数据库中的数据

  27. 27

    无法从Meteorjs中的Mongo数据库中删除项目

  28. 28

    我如何从数据库中删除recyclerView中的项目

  29. 29

    从数据库中删除项目 - Android Studio 中的 ListView

热门标签

归档