私は検索して見つけました: How to check if a value already exists in the database in Android . 私が抱えている問題は、トーストが表示されず、入力されている値がデータベースに既にある値と一致する場合でも、データがデータベースに入力されることです。データが重複していないことを確認するために UNIQUE を使用することについての投稿を見たことがありますが、私が必要としているものには機能しません。if (entries.contains(checkDuplicates) == false) と if (!entries.equals(checkDuplicates)) を試してみましたが、それらでも同じ結果が得られました。私が見逃している、または理解していないのは単純なことだと私は知っています。誰かが私を助けて、正しい方向に向けてください。
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;
}