2014-03-05 2 views
0

저는 Eclipse (Android)에서 작업하고 있습니다. 다음 블록에서 EmployeeInt 및 RestaurantInt는 데이터 유형이고 query()는 데이터베이스에 대한 연결을 열어 결과를 파싱합니다. 쿼리 결과를 인쇄 할 때 동일한 문자열이 표시되지만 부울 값은 여전히 ​​false입니다. 나는 문자열을 다듬기 위해 노력했지만 도움이되지 않았습니다.왜이 .equals()가 작동하지 않습니까?

public boolean verifyEmployee(String email, String password) { 
    ArrayList<EmployeeInt> employeeEmailID = query("SELECT employeeID FROM employees WHERE emailAddress = \'"+email+"\'"); 
    ArrayList<EmployeeInt> employeePasswordID = query("SELECT employeeID FROM employees WHERE password = \'"+password+"\'"); 
    String stringEmployeeEmailID = employeeEmailID.toString(); 
    String stringEmployeePasswordID = employeePasswordID.toString(); 

    if(stringEmployeeEmailID.equals(stringEmployeePasswordID)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

위에서 실행하면 다음 블록 (사실상 동일)을 실행하는 것이 허위입니다.

public boolean verifyRestaurant(String email, String password) { 
    ArrayList<RestaurantInt> restaurantEmailID = query("SELECT restaurantID FROM restaurants WHERE emailAddress = \'"+email+"\'"); 
    ArrayList<RestaurantInt> restaurantPasswordID = query("SELECT restaurantID FROM restaurants WHERE password = \'"+password+"\'"); 
    String stringRestaurantEmailID = restaurantEmailID.toString(); 
    String stringRestaurantPasswordID = restaurantPasswordID.toString(); 

    if(stringRestaurantEmailID.equals(stringRestaurantPasswordID)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

누구든지 내 실수를 지적 할 수 있습니까?

편집

나는이로 변경하고 일했다 :

public boolean verifyEmployee(String email, String password) { 
    ArrayList<EmployeeInt> employeeEmailID = query("SELECT * FROM employees WHERE emailAddress = \'"+email+"\'"); 
    ArrayList<EmployeeInt> employeePasswordID = query("SELECT * FROM employees WHERE password = \'"+password+"\'"); 
    int intEmployeeEmailID = employeeEmailID.get(0).getID(); 
    int intEmployeePasswordID = employeePasswordID.get(0).getID(); 

    if(intEmployeeEmailID==intEmployeePasswordID) { 
     return true; 
    } else { 
     return false; 
    } 
} 

가 나는 또한 수익률 (조건)을 사용할 수 있습니다 알고 있지만 나는 경우 일부 메시지를 추가하고 싶습니다 로그인에 실패했습니다.

게시 할 앱을 만들지 않고 있습니다. 할당. 도와 주셔서 감사합니다!

+1

비교를 위해'ArrayList'를'String'으로 변환하는 이유는 무엇입니까? 또한 두 경우 모두'ArrayList '의 내용을 보여줄 수 있습니까? –

+3

문제를 디버깅하려면 문제를 추적하기 전에 비교하기 전에'stringEmployeeEmailID'와'stringEmployeePasswordID'를 확인하십시오. 일반적으로이 인증 방법은 두 명의 직원이 동일한 전자 메일 주소 또는 동일한 암호를 사용하면 실패 할 수 있으므로 잘 설계되지 않았습니다. –

+2

+'if (condition) {return true;} else {return false;}'를 사용하지 마십시오. –

답변

1

ArrayList에서 toString()으로 전화하십시오. 서로 다른 두 개의 ArrayList 객체는 서로 다른 두 개의 문자열을 반환합니다. toString() 아마 ArrayList의 첫 번째 요소를 가져 와서 THAT를 문자열로 변환하려고했을 것입니다.

EmployeeInt는 사용자 정의 개체입니다. 내 예에서는 getID()으로 검색 할 수있는 일부 int 필드가 있다고 가정합니다.

ArrayList<EmployeeInt> idList = query("SELECT employeeID FROM employees WHERE emailAddress = \'"+email+"\'"); 
int ID = idList.get(0).getID(); 
stringEmployeeEmailID = String.valueOf(ID); 

이 코드를보다 쉽게 ​​읽을 수 있습니다 :

  • query()ArrayList
  • 우리는 ArrayList의 첫 번째 요소를 추출 반환 - 이것은 당신이
  • 우리가 얻을 남겨 부분입니다 해당 요소의 ID
  • 우리는 문자열로 변환
+0

처음에는 내 초기 가정/권장 사항 이었지만 이 경우에도 toString이 작동하는 것 같습니다. https://ideone.com/gTC9vY – dberm22

+0

@ dberm22 ArrayList의 toString은 기본 배열의 내용을 인쇄하기 때문에 운이 좋았습니다. 내용이 정확히 동일하도록 하드 코드 된 것입니다. , 긍정적 인 결과를 얻을 수 있습니다. – Rainbolt

+0

올바른데, ArrayList도 사용하고 있습니다. ArrayList를 얻는 방법에 관계없이, 일치하면 true를 반환해야합니다. 이것은 최선의 방법은 아니라고 동의했지만 효과가 있습니다. – dberm22

관련 문제