vendredi 6 novembre 2015

Android SQLite database doesn't update after successful use of delete method

I have a trouble with update my SQLite database. In my app in StartActivity in onCreate() I called a fillList() function which fills ArrayList myList data from database.

public void fillList(){
    myList = new ArrayList<Event>();
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(dbHandler.DATABASE_TABLE4);
    String asColumnsToReturn[] = {dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_NAME,
            dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_ROWID, dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_HOUR,
            dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_DESCRIPTION, dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_NOTIFICATION,
            dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_TIME,  dbHandler.DATABASE_TABLE4 + "." + dbHandler.KEY_STAN};

    mCursor = queryBuilder.query(dbHandler.mkDatabase, asColumnsToReturn, null, null, null, null, null);

    for (mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext()) {
        myList.add(new Event(
                        mCursor.getString(mCursor.getColumnIndex(dbHandler.KEY_NAME)),
                        mCursor.getString(mCursor.getColumnIndex(dbHandler.KEY_DESCRIPTION)),
                        mCursor.getString(mCursor.getColumnIndex(dbHandler.KEY_HOUR)),
                        mCursor.getInt(mCursor.getColumnIndex(dbHandler.KEY_NOTIFICATION)),
                        mCursor.getInt(mCursor.getColumnIndex(dbHandler.KEY_TIME)),
                        mCursor.getLong(mCursor.getColumnIndex(dbHandler.KEY_ROWID)),
                        mCursor.getInt(mCursor.getColumnIndex(dbHandler.KEY_STAN))
                )
        );
    }
    mCursor.close();
}

And that function work correctly, but in ListFragment I create list using data from myList, and I have an option to delete records.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View V = inflater.inflate(R.layout.lista_tab, container, false);
    //no matter code
    ListaFragment.mAdapter = new EventAdapter(getActivity(), StartActivity.myList);
    setListAdapter(mAdapter);
    mAdapter.setListenerView(ListaFragment.this);
    return V;
}


@Override
public void onClickView(int position, View v){
    switch(v.getId()){
        //other case
        case R.id.bucket:
            dbHandler.mkDatabase.beginTransaction();
            try {
                long index = dbHandler.mkDatabase.delete(dbHandler.DATABASE_TABLE4, dbHandler.KEY_ROWID + "=?", new String[]{changeId(StartActivity.myList.get(position).getId())});
                dbHandler.mkDatabase.setTransactionSuccessful();
            } catch (SQLException e){
                Toast.makeText(getActivity(), "Error "+e, Toast.LENGTH_SHORT).show();
            } finally {
                dbHandler.mkDatabase.endTransaction();
            }
            StartActivity.myList.remove(position);
            mAdapter.notifyDataSetChanged();
            break;
    }
}
public String changeId (Long id){
    String astrArgs[] = { id.toString() };
    return astrArgs[0];
}

And everything look like this work correctly - I have no errors, delete function returns 1, mAdapter update view. But if I close my app , and start it again (fillList() is called again), then deleted data comes back to the list. I have no idea what I'm doing wrong. Thanks for any help.

Aucun commentaire:

Enregistrer un commentaire