检查列表是否包含多个值android

检查列表是否包含多个值android

问题描述:

我已搜索并找到: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; 
} 

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://*.com/questions/4404084/find-if-a-value-exists-in-arraylist,这也帮助我。 – Jasonwilliams10 2013-02-23 02:35:25

替换:

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