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

서버와 로그인 통신시 문제가 생겼어요 봐주세요 ㅠ

0 추천

제가 지금 서버를 통해서 로그인을 하려고 합니다... 아이디, 비밀번호가 맞으면 리턴값으로 서버에서 'OK'이 오거든요?

그래서 제가 if문을 써서 리턴 값이 OK이면 다음 액티비티로 넘기려고하는데 문제가 있네요 ㅠㅠㅠ 일단 제 소스는

 

btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            CustomTask task = new CustomTask();
            task.execute(edt1.getText().toString(), edt2.getText().toString());
            
            String data = String.valueOf(1); //여기 부분이에요 제가 하려는게 리턴 값이 1이여서 int인 것 같아 String으로 바꾸고 비교하려고합니다.
여기서 안됩니다...ㅠㅠ 뭐가 잘못 된거지 모르겠어요 제발 알려주세요....통신은 잘되는것 같아요..
            if (receiveMsg == data){

                Toast.makeText(getApplicationContext(), "로그인 성공", Toast.LENGTH_LONG).show();
                Intent i = new Intent(getApplicationContext(), Main2Activity.class);
                startActivity(i);
            }
            else{
                Toast.makeText(getApplicationContext(),"ID 및 Password를 확인하십시오", Toast.LENGTH_LONG).show();
            }
        }
    });
}

class CustomTask extends AsyncTask<String, Void, String> {
    String sendMsg;
    @Override
    protected String doInBackground(String... strings) {
        try {
            String str;
            URL url = new URL("주소자리에요 잠시 가려놓았습니다.");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestMethod("POST");//데이터를 POST 방식으로 전송합니다.
            OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
            sendMsg = "user_id="+strings[0]+"&user_pw="+strings[1];//보낼 정보인데요. GET방식으로 작성합니다. ex) "id=rain483&pwd=1234";
            //회원가입처럼 보낼 데이터가 여러 개일 경우 &로 구분하여 작성합니다.
            osw.write(sendMsg);//OutputStreamWriter에 담아 전송합니다.
            osw.flush();
            //jsp와 통신이 정상적으로 되었을 때 할 코드들입니다.
            if(conn.getResponseCode() == conn.HTTP_OK) {
                InputStreamReader tmp = new InputStreamReader(conn.getInputStream(), "UTF-8");
                BufferedReader reader = new BufferedReader(tmp);
                StringBuffer buffer = new StringBuffer();
                //jsp에서 보낸 값을 받겠죠?
                while ((str = reader.readLine()) != null) {
                    buffer.append(str);
                }
                receiveMsg = buffer.toString();
                Log.i("통신 결과", receiveMsg);
                

            } else {
                Log.i("통신 결과", conn.getResponseCode()+"에러");
                
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return receiveMsg;
    }
}
Autobhan (640 포인트) 님이 2018년 12월 4일 질문
Autobhan님이 2018년 12월 4일 수정

1개의 답변

0 추천
버튼이 눌리는 시점에 receiveMsg가 값이 들어가 있나요? 메인스레드에서 백그라운드 작업결과값을 비교하려 해서 그런것같은데요. AsyncTask의 onPostExcute에서 비교처리 후 액티비티 이동처리 해주셔야 할 것 같습니다.
익명사용자 님이 2018년 12월 4일 답변
제가 초보여서 그런데요...혹시 그거와 관련된 소스나 예제있나요?ㅠ 너무 어렵네요 첨하는데...
음..구글링으로 AsyncTask 검색하면 나오는 내용이에요. 간략하게 설명하자면 지금 상태에서 버튼클릭리스너 안에서는 AsyncTask 객체 생성및 excute만 해주시고 CustomTask 클래스 내에 onPostExecute 메소드를 오버라이딩하신후에 이 메소드 안에서 결과값을 받을 수 있는 변수값이 있습니다.
 @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            if(result != null && 로그인 비교처리로직이 참일경우) {
                액티비티 이동        
               }
        }
result값은 통신결과값인 buffer.toString()값과 같은 값입니다.
정말 감사합니다 한번 해볼게요...
...