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

로그인 기능 구현 중 JSONObject에 문제가 있는 상황에 대해 [closed]

0 추천

자바 언어로 로그인/회원가입을 구현하고 있습니다. 과정 중, 회원가입 기능은 정상적으로 동작하는데 로그인 기능이 작동하지 않고 있습니다.

 

코드는 이러합니다.

public class LoginActivity extends AppCompatActivity {
    private EditText et_id_log, et_pass_log;
    private Button btn_login, btn_register_log;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        et_id_log = findViewById(R.id.et_id_log);
        et_pass_log = findViewById(R.id.et_pass_log);

        //로그인,회원가입 버튼
        btn_login = findViewById(R.id.btn_login);
        btn_register_log = findViewById(R.id.btn_register_log);

        //버튼 클릭시 회원가입 페이지로 이동
        btn_register_log.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(intent);
            }
        });

        //로그인 버튼 클릭
        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String userID = et_id_log.getText().toString();
                String userPass = et_pass_log.getText().toString();
                System.out.println("버튼 클릭1");

                Response.Listener<String> responseListener = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            System.out.println("버튼 클릭2");
                            JSONObject jsonObject = new JSONObject(response);
                            boolean success = jsonObject.getBoolean("success");
                            System.out.println("버튼 클릭3");
                            if(success){ //로그인 성공
                                Toast.makeText(getApplicationContext(), "버튼 클릭", Toast.LENGTH_SHORT).show();
                                String JSONUserID = jsonObject.getString("userID");
                                String JSONUserPass = jsonObject.getString("userPassword");

                                System.out.println("버튼 클릭4");
                                Toast.makeText(getApplicationContext(), "로그인에 성공하셨습니다.", Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                //Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                                intent.putExtra("userID", JSONUserID);
                                intent.putExtra("userPass", JSONUserPass);
                                startActivity(intent);
                            }
                            else { //로그인 실패
                                Toast.makeText(getApplicationContext(), "로그인에 실패하셨습니다.", Toast.LENGTH_SHORT).show();
                                return;
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                };

                LoginRequst loginRequst = new LoginRequst(userID, userPass, responseListener);
                RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
                queue.add(loginRequst);

            }

        });
    }
}

 

 

그리고 로그인 버튼 클릭 시 나오는 오류 메시지는 이렇습니다.

2022-11-22 19:24:57.265 18358-18358/com.cookandroid.project_login_2 I/System.out: 버튼 클릭1
2022-11-22 19:24:57.324 18358-18358/com.cookandroid.project_login_2 I/System.out: 버튼 클릭2
2022-11-22 19:24:57.324 18358-18358/com.cookandroid.project_login_2 W/System.err: org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at org.json.JSON.typeMismatch(JSON.java:112)
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at org.json.JSONObject.<init>(JSONObject.java:172)
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at org.json.JSONObject.<init>(JSONObject.java:185)
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at com.cookandroid.project_login_2.LoginActivity$2$1.onResponse(LoginActivity.java:57)
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at com.cookandroid.project_login_2.LoginActivity$2$1.onResponse(LoginActivity.java:52)
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
2022-11-22 19:24:57.325 18358-18358/com.cookandroid.project_login_2 W/System.err:     at android.os.Handler.handleCallback(Handler.java:938)
2022-11-22 19:24:57.326 18358-18358/com.cookandroid.project_login_2 W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
2022-11-22 19:24:57.326 18358-18358/com.cookandroid.project_login_2 W/System.err:     at android.os.Looper.loopOnce(Looper.java:201)
2022-11-22 19:24:57.326 18358-18358/com.cookandroid.project_login_2 W/System.err:     at android.os.Looper.loop(Looper.java:288)
2022-11-22 19:24:57.326 18358-18358/com.cookandroid.project_login_2 W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7839)
2022-11-22 19:24:57.326 18358-18358/com.cookandroid.project_login_2 W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2022-11-22 19:24:57.326 18358-18358/com.cookandroid.project_login_2 W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
2022-11-22 19:24:57.326 18358-18358/com.cookandroid.project_login_2 W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

(맨 위의 버튼 클릭 print 메시지는 어디서 멈추는지를 확인하기 위해 여기 넣었습니다.)

 

서버에서 값을 JSON이 아닌 string으로 받고 있어 response 출력해보라는 말이나 너무 초보라 그것도 하는 법을 모르고 있습니다...

그렇다고 서버의 값을 이것저것 바꿔봐도 개선이 안 되네요. 여기서 나아가려면 어떻게 해야 할까요?

질문을 종료한 이유: 다른 경로로 문제 해결
현실의하루 (120 포인트) 님이 6일 질문
현실의하루님이 6일 closed
문제 해결됐습니다. 서버쪽 변수명에 대한 오타 문제였네요.
JSONObject 를 사용하지 마시고 Gson같은 라이브러리를 사용하는게 훨씬 편하고 안전합니다. Volley 예제에 보면 Gson을 사용하는 샘플이 있으니 참고하세요.
https://google.github.io/volley/request-custom.html
...