2013-02-22 70 views
0

我已搜索並找到:How to check if a value already exists in the database in Android。我遇到的問題是,當輸入的值與數據庫中已存在的值匹配時,從不顯示,並且數據仍然輸入到數據庫中。我看過有關使用UNIQUE來確保數據不重複的帖子,但它不適用於我需要做的事情。我試過如果(entries.contains(checkDuplicates)== false)和if(!entries.equals(checkDuplicates)),並獲得了相同的結果。我知道這是簡單的,我失蹤或不理解。請有人幫助我並指出正確的方向嗎?檢查列表是否包含多個值android

private void saveState() { 

    Calendar calendar = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
    eventDate = sdf.format(calendar.getTime()); 

    String date = eventDate; 
    String event = eventTitle.getText().toString(); 
    String empID = fiveAndTwo.getText().toString(); 

    /** 
    * CRUD Operations 
    * */ 
    // Inserting entries to DB 

    // Reading all contacts 
    Log.d("Reading: ", "Reading all entries.."); 

    List<EventEntries> entries = db.getAllEntries(); 

    for (EventEntries ee : entries) { 
     String log = "Id: " + ee.getID() + " Date: " + ee.getDate() + " Event Name: " + ee.getEvent() + " Emp ID: " + ee.getempID(); 

     // Writing entries to log 
     Log.d("Entry: ", log); 


    } 

    String checkDuplicates = date + event + empID; 

    if (!entries.contains(checkDuplicates)) { 

     Log.d("Insert: ", "Inserting .."); 

     db.addEntry(new EventEntries(date, event, empID)); 
     String logEntry = "Date: " + date + " Event Name: " + event + " Emp ID: " + empID; 
     Log.d("Entered to DB:", logEntry); 

    } else { 

     Toast.makeText(this,"Employee has already been scanned for this event.", Toast.LENGTH_SHORT).show(); 

    } 
} 

編輯:我得到它的工作。下面是我做的:

private void saveState() { 

    Calendar calendar = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
    eventDate = sdf.format(calendar.getTime()); 

    String date = eventDate; 
    String event = eventTitle.getText().toString(); 
    String empID = fiveAndTwo.getText().toString(); 

    /** 
    * CRUD Operations 
    * */ 

    // Reading all entries 
    Log.d("Reading: ", "Reading all entries.."); 

    List<EventEntries> entries = db.getAllEntries(); 

    for (EventEntries ee : entries) { 
     String log = "Id: " + ee.getID() + " Date: " + ee.getDate() + " Event Name: " + ee.getEvent() + " Emp ID: " + ee.getempID(); 

     // Writing entries to log 
     Log.d("Entry: ", log); 

    } 

    EventEntries checkDuplicates = new EventEntries(date, event, empID); 

    if (!entries.contains(checkDuplicates)) { 

     Toast.makeText(this,"Successfully entered.", Toast.LENGTH_SHORT).show(); 

     // Inserting entries to DB 
     Log.d("Insert: ", "Inserting .."); 
     db.addEntry(new EventEntries(date, event, empID)); 
     String logEntry = "Date: " + date + " Event Name: " + event + " Emp ID: " + empID; 
     Log.d("Entered to DB:", logEntry); 


    } else { 

     empAlert(); 

    } 
} 

這裏是我加入EventEntries類:

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((_date == null) ? 0 : _date.hashCode()); 
    result = prime * result + ((_empID == null) ? 0 : _empID.hashCode()); 
    result = prime * result + ((_event == null) ? 0 : _event.hashCode()); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    EventEntries other = (EventEntries) obj; 
    if (_date == null) { 
     if (other._date != null) 
      return false; 
    } else if (!_date.equals(other._date)) 
     return false; 
    if (_empID == null) { 
     if (other._empID != null) 
      return false; 
    } else if (!_empID.equals(other._empID)) 
     return false; 
    if (_event == null) { 
     if (other._event != null) 
      return false; 
    } else if (!_event.equals(other._event)) 
     return false; 
    return true; 
} 

回答

3

entries.contains(checkDuplicates)始終返回false,因爲entriesEventEntries對象的列表,checkDuplicatesString。您應該使用EventEntries對象作爲參數調用entries.contains

一件事:

// assuming entries is not empty 
EventEntries first = entries.get(0); 
entries.contains(first); // --> this is TRUE 

// create a dupe of "first" 
EventEntries firstDupe = new EventEntries(.....); 
entries.contains(firstDupe); // --> in *general* this is FALSE 

一般來說,第二種情況是假的。如果在EventEntries類中覆蓋了equals方法,那麼first.equals(firstDupe)將返回true。只有這樣,第二個例子纔會返回true。

下面是一個示例實現:

public boolean equals(Object obj) { 
    if (obj instanceof EventEntries) { 
     EventEntries other = (EventEntries)obj; 
     if (date.equals(other.date) && event.equals(other.event) 
      && empID == other.empID) { 
      return true; 
     } 
    } 
    return false; 
} 

(根據需要調整)

+0

我嘗試了下面的評論沒有成功。我是否需要做一些與獲取EventsEntries對象不同的東西? – Jasonwilliams10 2013-02-22 21:20:54

+0

看到我更新的答案,我添加了更多細節。 – janos 2013-02-22 21:53:52

+0

感謝您的信息。我得到它與您的幫助一起工作,我發現http://stackoverflow.com/questions/4404084/find-if-a-value-exists-in-arraylist,這也幫助我。 – Jasonwilliams10 2013-02-23 02:35:25

3

替換:

String checkDuplicates = date + event + empID;

有:

EventEntries checkDuplicates = new EventEntries(date, event, empID);

+0

我試過了,它仍然不能正常工作。它永遠不會意識到信息已經存在。更改爲使日期,事件和empID進入EventEntries對象,請更正?請原諒我的無知,我還不熟悉android,java和麪向對象編程。 – Jasonwilliams10 2013-02-22 21:19:25

+0

謝謝你的幫助。我使用了你的答案和上面的答案的組合來使它起作用。 – Jasonwilliams10 2013-02-23 02:39:12

相關問題