안녕하세요~~
지금 안드로이드 클라이언트, 자바 서버, mysql을 사용한 소켓통신으로 회원가입이랑 로그인을 구현중인데, 구현이 잘 안돼서 질문드립니다.ㅜㅜ 소스는 전체가 아닌 해당되는 소스만 올릴께요~
1. SigninActivity.java (안드로이드의 회원가입 액티비티입니다.)
//ok버튼 눌렀을 때 회원가입 성공 시 메인2로
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//id가, pw가, email이 null이 아니고 빈칸이 아닐 때
if(id.getText().toString() != null && !id.getText().toString().equals("")
&& pw.getText().toString() != null && !pw.getText().toString().equals("")
&& email.getText().toString() != null && !email.getText().toString().equals("")
){
PrintWriter out1 = new PrintWriter(networkWriter,true);
PrintWriter out2 = new PrintWriter(networkWriter,true);
PrintWriter out3 = new PrintWriter(networkWriter,true);
PrintWriter out4 = new PrintWriter(networkWriter,true);
String action = "signin";
String rid = id.getText().toString();//리턴되는 id는 rid
String rpw = pw.getText().toString();//리턴되는 pw는 rpw
String remail = email.getText().toString();//리턴되는 email은 remail
out1.println(action);
out2.println(rid);
out3.println(rpw);
out4.println(remail);
intent = new Intent(SigninActivity.this, LoginActivity.class);
startActivity(intent);
}else{
Toast.makeText(SigninActivity.this, "모든 항목을 채워주세요!", Toast.LENGTH_SHORT).show();
intent = new Intent(SigninActivity.this, SigninActivity.class);
startActivity(intent);
}
}
2. LoginActivity.java (안드로이드의 로그인 액티비티입니다.)
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//id가, pw가, email이 null이 아니고 빈칸이 아닐 때
if(id.getText().toString() != null && !id.getText().toString().equals("")
&& pw.getText().toString() != null && !pw.getText().toString().equals("")
){
PrintWriter out1 = new PrintWriter(networkWriter,true);
PrintWriter out2 = new PrintWriter(networkWriter,true);
PrintWriter out3 = new PrintWriter(networkWriter,true);
PrintWriter out4 = new PrintWriter(networkWriter,true);
String action = "login";
String rid = id.getText().toString();//리턴되는 id는 rid
String rpw = pw.getText().toString();//리턴되는 pw는 rpw
String email = null;
out1.println(action);
out2.println(rid);
out3.println(rpw);
out4.println(email);
/*
//////////로그인 결과 수신하는 부분. 만약 결과가 fail이 아닐 경우에만 로그인되어 Main2 액티비티로 넘어감
try {
String result = networkReader.readLine();
if(result != "fail"){
intent = new Intent(LoginActivity.this, Main2.class);
startActivity(intent);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
}else{
Toast.makeText(LoginActivity.this, "모든 항목을 채워주세요!", Toast.LENGTH_SHORT).show();
intent = new Intent(LoginActivity.this, LoginActivity.class);
startActivity(intent);
}
}
3. Server.java (서버인 자바에서 쿼리문을 수행하는 부분입니다)
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
conn = DriverManager.getConnection(jdbcUrl, userId, userPass);
stmt = conn.createStatement();
System.out.println("1");
//////signin 뭐리문(email이 null이 아닐 때)
if(email != null){
System.out.println("서버: <회원가입 요청 됨> " + "id:" + id + "/pw:" + pw + "/email:" + email);
stmt.executeUpdate("insert into member(id,pw,email) values('" + id + "','" + pw + "','" + email + "')");
stmt.close();
conn.close();
}
///////////////////////////////////////////////////////////////////
//////login 뭐리문(email이 null일 때 = login에서 null을 송신)
else if(email == null){
rs = stmt.executeQuery("select id from member where id = '" + id + "' and pw = '" + pw + "'");
//select 결과 성공하면 id 표시
if(rs.next()){
System.out.println("서버: <로그인 성공> id:"+rs.getString(1)+"인 회원이 로그인하였습니다.");
}
//select 결과가 null(회원정보 없음)이면 클라이언트로 실패 메세지 보냄
else{
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mysocket.getOutputStream())));
out.println("fail");
}
stmt.close();
conn.close();
}
///////////////////////////////////////////////////////////////////
}catch(Exception e){
System.out.println("DB Open Conntection Exception : " + e.getMessage());
}
이런식으로 구현하였는데요, 보시다시피 회원가입은 id,pw,email로 하는거고, 로그인은 id와 pw로만 합니다. 그래서 로그인 시 email자리에 null을 넣고 서버로 전송하는데요, if(email == null) 이 부분을 처리하지 못합니다.ㅠㅠ
무조건 회원가입으로 넘어가서 mysql을 확인해보면 email이 null이라서 로그인(select)를 하는게 아니고, email에 'null'이라는 문자가 입력된 상태로 회원가입(insert)되어 있어요...... 어떻게 해야 할까요 ㅜㅜ 몇 일째 고민중입니다. 도와주세요~~~~~~