마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드-자바-mysql 소켓통신 회원가입&로그인 질문이요!

0 추천

안녕하세요~~

지금 안드로이드 클라이언트, 자바 서버, 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)되어 있어요...... 어떻게 해야 할까요 ㅜㅜ 몇 일째 고민중입니다. 도와주세요~~~~~~

뎡이 (170 포인트) 님이 2013년 5월 20일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...