2017-02-12 226 views
0

我有一個SQL數據庫,我想刪除使用列表視圖中每個條目旁邊的按鈕顯示在列表視圖中的條目。但目前它不會讓我刪除。SQLIte數據庫無法刪除條目

此問題位於selectionargs變量中,如下所示。如果我把一個數字例如1,手動進入selectionargs它會工作,但我一直試圖通過代表每個條目的變量來完成。這不會導致錯誤,但只是直接向Toast消息不能刪除。 ac.ID引用適配器類和列表項條目的ID。

收藏類:

public class Bookmark extends AppCompatActivity { 

myAdapter myAdapter; 
DBManager db; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_bookmark); 
    db = new DBManager(this); 

    onLoadAttraction(); 
    // onLoadTransport(); 


} 

public void onLoadAttraction() { 
    ArrayList<Adapter> listData = new ArrayList<Adapter>(); 
    listData.clear(); 
    Cursor cursor = db.Query("BookmarkAttraction",null, null, null, DBManager.ColId); 

    if (cursor.moveToFirst()) { 
     do { 
      listData.add(new Adapter(
        cursor.getString(cursor.getColumnIndex(DBManager.ColType)) 
        , cursor.getString(cursor.getColumnIndex(DBManager.ColName)) 
        , cursor.getString(cursor.getColumnIndex(DBManager.ColLocation)) 
        , cursor.getString(cursor.getColumnIndex(DBManager.ColOpening)) 
        , cursor.getString(cursor.getColumnIndex(DBManager.ColClosing)) 
        , cursor.getString(cursor.getColumnIndex(DBManager.ColNearbyStop)) 
      ,null,null,null, null, null)); 
     } while (cursor.moveToNext()); 
    } 

    myAdapter = new myAdapter(listData); 
    ListView ls = (ListView) findViewById(R.id.listView); 
    ls.setAdapter(myAdapter); 
} 

public void onLoadTransport(){ 
    ArrayList<Adapter> listData = new ArrayList<Adapter>(); 
    listData.clear(); 
    Cursor cursor = db.Query("BookmarkTransport",null, null, null, DBManager.ColId); 

    if (cursor.moveToFirst()) { 
     do { 
      listData.add(new Adapter(
        cursor.getString(cursor.getColumnIndex(DBManager.ColType)) 
        , cursor.getString(cursor.getColumnIndex(DBManager.ColName)) 
        , cursor.getString(cursor.getColumnIndex(DBManager.ColLocation)) 
        , null 
        , null 
        , null 
        ,cursor.getString(cursor.getColumnIndex(DBManager.ColTime)) 
        ,cursor.getString(cursor.getColumnIndex(DBManager.ColNextStop)) 
        , cursor.getString(cursor.getColumnIndex(DBManager.ColPhoneNumber)) 
        ,null,null)); 
     } while (cursor.moveToNext()); 
    } 

    myAdapter = new myAdapter(listData); 
    ListView ls = (ListView) findViewById(R.id.listView); 
    ls.setAdapter(myAdapter); 
} 

    class myAdapter extends BaseAdapter { 
    public ArrayList<Adapter> listItem; 
    Adapter ac; 
    public myAdapter(ArrayList<Adapter> listItem) { 
     this.listItem = listItem; 

    } 

    @Override 
    public int getCount() { 
     return listItem.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup viewGroup) { 
     LayoutInflater myInflator = getLayoutInflater(); 
     final View myView = myInflator.inflate(R.layout.list_bookmark, null); 

     ac = listItem.get(position); 


     TextView Type = (TextView) myView.findViewById(R.id.BMType); 
     Type.setText(ac.Type); 

     TextView Name = (TextView) myView.findViewById(R.id.BMName); 
     Name.setText(ac.Name); 

     TextView Location = (TextView) myView.findViewById(R.id.BMLocation); 
     Location.setText(ac.Location); 

     TextView Opening = (TextView) myView.findViewById(R.id.BMOpen); 
     Opening.setText(ac.Opening); 


     TextView Closing = (TextView) myView.findViewById(R.id.BMClose); 


      Closing.setText(ac.Closing); 


     TextView NearbyStop1 = (TextView) myView.findViewById(R.id.BMNearbyStop); 

      NearbyStop1.setText(ac.NearbyStop); 


     Button buttonDelete = (Button)myView.findViewById(R.id.buttonDelete); 
     buttonDelete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String[] selectionArgs = {ac.ID}; 
       int count = db.Delete("BookmarkAttraction","ID=? ",selectionArgs); 
       if (count > 0) { 
        onLoadAttraction(); 
        Toast.makeText(getApplicationContext(),"Data deleted", Toast.LENGTH_LONG).show(); 
       }else{ 
        Toast.makeText(getApplicationContext(),"Cannnot delete", Toast.LENGTH_LONG).show(); 
       } 

      } 
     }); 



     return myView; 
    } 
} 
} 

DBManager類:

public class DBManager { 

private SQLiteDatabase sqlDB; 
static final String ColId = "ID"; 
static final String DBName = "InternalDB"; 
static final String TableName = "BookmarkAttraction"; 
static final String TableName2 = "BookmarkTransport"; 
static final String TableName3 = "Itinerary"; 
static final String ColItineraryName = "ItineraryName"; 
static final String ColDate = "Date"; 
static final String ColType = "Type"; 
static final String ColName = "Name"; 
static final String ColLocation = "Location"; 
static final String ColOpening = "OpeningTime"; 
static final String ColClosing = "ClosingTime"; 
static final String ColNearbyStop = "NerbyStop1"; 


static final String ColTime = "Time"; 
static final String ColNextStop = "NextStop"; 
static final String ColPhoneNumber = "PhoneNumber"; 

static final int DBVersion = 1; 

static final String CreateTable = "CREATE TABLE IF NOT EXISTS " + TableName + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + ColType+ " TEXT," + 
     ColName+ " TEXT," + ColLocation+ " TEXT," + ColOpening+ " TEXT," +ColClosing+ " TEXT," + ColNearbyStop+ " TEXT);"; 

static final String CreateTabe2 = "CREATE TABLE IF NOT EXISTS " +TableName2 + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," 
     + ColType + " TEXT," 
     + ColName + " TEXT," 
     + ColLocation + " TEXT," 
     + ColTime+ " TEXT," 
     + ColNextStop + " TEXT," 
     + ColPhoneNumber + " TEXT);"; 

static final String CreateTable3 = "CREATE TABLE IF NOT EXISTS " + TableName3 + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + ColItineraryName + " TEXT," 
     + ColDate + " TEXT," + ColName + " TEXT," + ColLocation + " TEXT," + ColTime + " TEXT);"; 


static class DBHelper extends SQLiteOpenHelper{ 
    Context context; 

    DBHelper(Context context){ 
     super(context, DBName, null, DBVersion); 
     this.context = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     Toast.makeText(context,DBName,Toast.LENGTH_LONG).show(); 
     db.execSQL(CreateTable); 
     Toast.makeText(context,"Table is created ", Toast.LENGTH_LONG).show(); 
     db.execSQL(CreateTabe2); 
     Toast.makeText(context,"Transport table created", Toast.LENGTH_LONG).show(); 
     db.execSQL(CreateTable3); 
     Toast.makeText(context,"Itin table created", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int i, int i1) { 
     db.execSQL("DROP TABLE IF EXISTS" + TableName); 
     db.execSQL("DROP TABLE IF EXISTS" + TableName2); 
     db.execSQL("DROP TABLE IF EXISTS" + TableName3); 
     onCreate(db); 
    } 
} 


public DBManager(Context context){ 
    DBHelper db = new DBHelper(context); 
    sqlDB = db.getWritableDatabase(); 
} 

public long Insert(String tablename,ContentValues values){ 
    long ID = sqlDB.insert(tablename,"",values); 
    return ID; 
} 

public Cursor Query(String tablename, String [] projection, String selection, String [] selectionArgs, String sortOrder){ 
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 
    qb.setTables(tablename); 
    Cursor cursor = qb.query(sqlDB,projection, selection, selectionArgs,null,null,sortOrder); 
    return cursor; 
} 

public int Delete(String tablename,String selection, String[] selectionArgs){ 
    int count = sqlDB.delete(tablename,selection,selectionArgs); 
    return count; 
} 

}

適配器類:

public class Adapter { 

public String ID; 
public String Type; 
public String Name; 
public String Location; 
public String Opening; 
public String Closing; 
public String NearbyStop; 
public String Time; 
public String NextStop; 
public String PhoneNumber; 
public String Latitude; 
public String Longitude; 

public Adapter(String type, String name, String location, String opening, String closing, 
       String nearbyStop, String time, String nextStop, String phoneNumber, String Latitude, 
       String Longitude) { 
    this.Type = type; 
    this.Name = name; 
    this.Location = location; 
    this.Opening = opening; 
    this.Closing = closing; 
    this.NearbyStop = nearbyStop; 
    this.Time = time; 
    this.NextStop = nextStop; 
    this.PhoneNumber = phoneNumber; 
    this.Latitude = Latitude; 
    this.Longitude = Longitude; 
} 
} 

的刪除按鈕的代碼是在我的書籤類與th e DBManager持有實際的刪除代碼。如果任何人都可以幫助,這將不勝感激。

+0

您應該認真考慮閱讀[Java命名約定](http://www.javatpoint.com/java-naming-conventions) –

回答

0

刪除myAdapter類的ac字段,並將其用作getView方法中的方法變量。

然後使用ListView.setOnItemClickListener方法添加具有位置感知的點擊式偵聽器。 (在設置適配器後只做一次)通過這種方法,您可以使用listItem.get(position)來獲取該位置的項目。

+0

謝謝幫助了很多 – Sam