RecordFilter 인터페이스를 사용하여 일부 레코드를 필터링하려고합니다. 내 응용 프로그램에서 나는j2me - 두 개 이상의 기준으로 결과 필터링
여기내가 '무엇 (그/그녀가 너무 둘 또는 둘을 입력 할 수 있습니다) 사용자가 ID 또는 이름을 입력 할 수있는, 이것과 같은 인터페이스의 몇 가지를 가지고 지금까지 완료 :
고객 필터.
참고 :이 사용자가 ID를 입력하지 않은 경우, 나는이 기본 값으로 0을 전달 여기
, 그건 내가 customerID!=0
public class CustomerFilter implements RecordFilter {
private String mName_Filter;
private int mID_Filter;
public CustomerFilter(String name_Filter, int id_Filter) {
this.mName_Filter = name_Filter.toLowerCase();
this.mID_Filter = id_Filter;
}
public boolean matches(byte[] candidate) {
try {
ByteArrayInputStream bis = new ByteArrayInputStream(candidate);
DataInputStream dis = new DataInputStream(bis);
int customerID = dis.readInt();
String customerName = dis.readUTF().toLowerCase();
if ((customerName != null && customerName.indexOf(mName_Filter) != -1) && (customerID != 0 && customerID == mID_Filter))
return true;
if (customerName != null && customerName.indexOf(mName_Filter) != -1 && customerID == 0)
return true;
if (customerName == null && (customerID != 0 && customerID == mID_Filter))
return true;
if (customerName == null && customerID == 0)
return true;
} catch (IOException ex) {
//What's the point in catching a exception here???
}
return false;
}
}
검색 방법을 평가하는 이유 메서드는 "RMSCustomer"라고하는 클래스에 있으며 RMS 액세스와 관련된 모든 것을 처리합니다. 검색 메소드는 두 개의 매개 변수 (id 및 name)를 수신하고이를 사용하여 필터를 인스턴스화합니다.
1) 나는 가능한 값을 평가하는 코드를 향상시킬 수있는 방법 : 필터에서
:
public Customer[] search(int id, String name) throws RecordStoreException, IOException {
RecordStore rs = null;
RecordEnumeration recEnum = null;
Customer[] customerList = null;
try {
rs = RecordStore.openRecordStore(mRecordStoreName, true);
if (rs.getNumRecords() > 0) {
CustomerFilter filter = new CustomerFilter(name, id);
try {
recEnum = rs.enumerateRecords(filter, null, false);
if (recEnum.numRecords() > 0) {
customerList = new Customer[recEnum.numRecords()];
int counter = 0;
while (recEnum.hasNextElement()) {
Customer cust;
int idRecord = recEnum.nextRecordId();
byte[] filterRecord = rs.getRecord(idRecord);
cust = parseRecord(filterRecord);
cust.idRecord = idRecord;
customerList[counter] = cust;
counter++;
}
}
else{
customerList = new Customer[0];
//How to send a message to the midlet from here
//saying something like "No Record Exists.Please select another filter"
}
} finally {
recEnum.destroy();
}
}
else{
//How to send a message to the midlet from here
//saying something like "No Record Exists.Please Add record"
}
} finally {
rs.closeRecordStore();
}
return customerList;
}
은 비록, 작품 위에 표시된 코드는 여전히 몇 가지 질문/문제가 필터 (이름, id)? 더 많은 필터가 있다면 어떨까요 ?? 가능한 모든 조합을 테스트해야합니까 ??
2) 사용자가 ID도 이름도 입력하지 않으면 모든 레코드를 표시해야합니까? 아니면 "이름 또는 ID를 입력하십시오"라는 메시지가 표시되어야합니까? 이 경우 당신은 무엇을 할 것입니까?
3) 왜 아무것도 할 수 없을 때 필터에 try-catch를 넣어야합니까? 거기에서 어떤 경고도 표시 할 수 없나요? 검색 방법에서
:
1) 어떻게 그 방법에서 사용자에게 적절한 메시지를 표시 할 수 있습니까? 내가 너무 많은 질문을하면 "아니오 기록"(같은 필터의 완전한 예제가 있다는 그것은 단지, 내 코드에서 "ELSE"부품
죄송를 참조하십시오. 사전에
감사를
고맙습니다. 스미스 미스터 스미스 – Axel