2017-04-07 13 views
0

特定のIDが指定された行を削除しようとしていますが、リストビューに更新が反映されていますが、その行は削除されません。同じプロセスはupdateで動作しますが、削除はできません。ここでコードである:渡されるクリック商品のユーザがdeleteボタンをクリック手段2 ==AndroidのSQLiteでIDによる行が削除されない

... 

@Override 
    public void onPositiveClick(DialogFragment dialog, int which) { 

      //Shared Preferences 
      SharedPreferences pref = getSharedPreferences(EditLog.PREF_FILENAME, 0); 
      long id = 0; 
      String date = ""; 
      String hours = ""; 
      String lessonType = ""; 
      String weatherCondition = ""; 
      if (!(pref == null)) { 
       id = pref.getLong("rowId", 0); 
       date = pref.getString("date", ""); 
       hours = pref.getString("hours", ""); 
       lessonType = pref.getString("lessonType", ""); 
       weatherCondition = pref.getString("weatherCondition", ""); 
      } 

      if (which == 2) { 
       LessonLogDBHelper dbhelp = new LessonLogDBHelper(getApplicationContext()); 
       final SQLiteDatabase db = dbhelp.getWritableDatabase(); 
       db.delete(LessonLogContract.LogEntry.TABLE_NAME, "_id=?", new String[]{Long.toString(id)}); 
      } else { 
       LessonLogDBHelper dbhelp = new LessonLogDBHelper(getApplicationContext()); 
       final SQLiteDatabase db = dbhelp.getWritableDatabase(); 
       final ContentValues values = new ContentValues(); 
       values.put(LessonLogContract.LogEntry.CN_DATE, date); 
       values.put(LessonLogContract.LogEntry.CN_HOURS, hours); 
       values.put(LessonLogContract.LogEntry.CN_LESSON_TYPE, lessonType); 
       values.put(LessonLogContract.LogEntry.CN_WEATHER, weatherCondition); 
       db.update(LessonLogContract.LogEntry.TABLE_NAME, values, "_id=" + id, null); 

      } 

      FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
      transaction.replace(R.id.content_main, new DrivingLog()); 
      transaction.commit(); 

    } 

... 

た場合

MainActivity.java、(dB単位)ID、および私はdeleteと呼んでいます。このプロセスは更新のために機能しますが、削除はできません。

EDIT:

何か奇妙なニートの事私が見つけた私はupdateエントリーしようとすると、私はDBから任意の単一のエントリ削除になるということです。私が最初に更新しようとしないなら、私はできません。ここで

DEF、私のテーブルです:私は保存していなかった、私の[削除]ボタンをクリックしたときに

LessonLogContract

package com.example.name.drivinglessona3; 

import android.provider.BaseColumns; 
import android.util.StringBuilderPrinter; 

public class LessonLogContract { 
    private LessonLogContract() {} 

    public static class LogEntry implements BaseColumns { 
     public static final String TABLE_NAME = "lesson"; 
     public static final String CN_DATE = "date"; 
     public static final String CN_HOURS = "hours"; 
     public static final String CN_LESSON_TYPE = "lesson_type"; 
     public static final String CN_WEATHER = "weather"; 
    } 
} 

LessonLogDBHelper

package com.example.name.drivinglessona3; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 



public class LessonLogDBHelper extends SQLiteOpenHelper { 
    // If you change the database schema, you must increment the database version. 
    private static final String SQL_CREATE_ENTRIES = 
      "CREATE TABLE " + LessonLogContract.LogEntry.TABLE_NAME + " (" + 
        LessonLogContract.LogEntry._ID + " INTEGER PRIMARY KEY," + 
        LessonLogContract.LogEntry.CN_DATE+ " TEXT," + 
        LessonLogContract.LogEntry.CN_HOURS+ " TEXT," + 
        LessonLogContract.LogEntry.CN_LESSON_TYPE+ " TEXT," + 
        LessonLogContract.LogEntry.CN_WEATHER + " TEXT)"; 

    private static final String SQL_DELETE_ENTRIES = 
      "DROP TABLE IF EXISTS " + LessonLogContract.LogEntry.TABLE_NAME; 

    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "LogEntry.db"; 

    public LessonLogDBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(SQL_CREATE_ENTRIES); 
    } 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // This database is only a cache for online data, so its upgrade policy is 
     // to simply to discard the data and start over 
     db.execSQL(SQL_DELETE_ENTRIES); 
     onCreate(db); 
    } 
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     onUpgrade(db, oldVersion, newVersion); 
    } 
} 

を解決しました_idをSharedPreferencesに変換したので、MainActivityではidの値が間違っていました。ただ、削除ラインにString.valueOf()代わりに持つLong.toString()を変更

public void delete(int id) { 
     SQLiteDatabase db = getWritableDatabase(); 
     db.delete("MST_Item", "ItemID=" + id, null); 
     db.close(); 
} 
+0

db.deleteが実際に呼び出されているかどうか知っていますか? – M0rty

+0

ええ、それは –

+0

と呼ばれていますあなたのアイテムがクリックされていることを確認してください... ??? ....そしてまたここにスペースを残して..... "_id =?" –

答えて

0

はこれを試してみてください。

db.delete(LessonLogContract.LogEntry.TABLE_NAME, "_id=?", new String[]{String.valueOf(id)}); 

私はuのために、このメソッドの仕事を願っています:以下のコードでdb.delete()の行を置き換える意味 。

+0

'db.close();'をコーディングすると、呼び出し元のメソッドがデータベースがまだ開いていると予想される場合に問題が発生する可能性があります。 – MikeT

+0

MST_Itemとは何ですか? –

+0

Ya MST_Itemは、データベースのテーブル名です。 –

0

+0

が動作しない –

+0

@JeremyFisher次に、db.delete(LessonLogContract.LogEntry.TABLE_NAME、 "_id =" + id + ""、null); 'コードを試す必要があるかもしれません。なぜなら、整数型または倍精度型の比較があるときは、変換する代わりに直接比較し、文字列で比較する方が良いと思うからです。 –

関連する問題