检查列表是否包含多个值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,因为entries
是EventEntries
对象的列表,checkDuplicates
是String
。您应该使用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;
}
(根据需要调整)
替换:
String checkDuplicates = date + event + empID;
有:
EventEntries checkDuplicates = new EventEntries(date, event, empID);
我试过了,它仍然不能正常工作。它永远不会意识到信息已经存在。更改为使日期,事件和empID进入EventEntries对象,请更正?请原谅我的无知,我还不熟悉android,java和面向对象编程。 – Jasonwilliams10 2013-02-22 21:19:25
谢谢你的帮助。我使用了你的答案和上面的答案的组合来使它起作用。 – Jasonwilliams10 2013-02-23 02:39:12
我尝试了下面的评论没有成功。我是否需要做一些与获取EventsEntries对象不同的东西? – Jasonwilliams10 2013-02-22 21:20:54
看到我更新的答案,我添加了更多细节。 – janos 2013-02-22 21:53:52
感谢您的信息。我得到它与您的帮助一起工作,我发现http://stackoverflow.com/questions/4404084/find-if-a-value-exists-in-arraylist,这也帮助我。 – Jasonwilliams10 2013-02-23 02:35:25