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

Mysql과 안드로이드 스튜디오 연동

0 추천

PHP와 Mysql, 안드로이드 스튜디오를 연동중입니다.

 

그런데 JSONObject jsonObject에서 에러가 나네요.

org.json.JSONException: Value MySql of type java.lang.String cannot be converted to JSONObject

 

 

Response.Listener<String> responseListener = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            boolean success = jsonObject.getBoolean("success");
                            if(success) {
                                Toast.makeText(getApplicationContext(), "회원 등록에 성공하였습니다.",
                                        Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(getApplicationContext(), loginScreen.class);
                                startActivity(intent);
                            }
                            else {
                                Toast.makeText(getApplicationContext(), "회원 등록에 실패하였습니다.",
                                        Toast.LENGTH_SHORT).show();
                                return;
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                };

 

php파일입니다.

<?php
	$host = "localhost";
	$dbUser = "";
	$db_pw = "";
	$db_name = "";

	//mysqli_connect("localhost", "사용자 아이디", "패스워드", "사용할 DB")
	$connection = mysqli_connect("$host", "$dbUser", "$db_pw", "$db_name");

	// connection check
	if (mysqli_connect_errno()) {
		printf("Connection failed: %s \n", mysqli_connect_error());
		exit();
	}
	else {
		echo "MySql connection is completed";
	}

	mysqli_query($connection, 'SET NAMES utf8');

	$userId = $_POST["userId"];
	$userPw = $_POST["userPw"];
	$userName = $_POST["userName"];
	$sex = $_POST["sex"];

	$statement = mysqli_prepare($connection, "INSERT INTO User VALUE (?,?,?,?)");
	mysqli_stmt_bind_param($statement, "ssss", $userId, $userPw, $userName, $sex);
	mysqli_stmt_execute($statement);

	$response = array();
	$response["success"] = true;

	echo json_encode($response);

	mysqli_close($connection);
?>

 

에러코드입니다.

W/System.err: org.json.JSONException: Value MySql of type java.lang.String cannot be converted to JSONObject
        at org.json.JSON.typeMismatch(JSON.java:112)
        at org.json.JSONObject.<init>(JSONObject.java:169)
        at org.json.JSONObject.<init>(JSONObject.java:182)
        at com.example.myhealthdiary.signUpScreen$1$1.onResponse(signUpScreen.java:52)
        at com.example.myhealthdiary.signUpScreen$1$1.onResponse(signUpScreen.java:48)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
        at android.os.Handler.handleCallback(Handler.java:938)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

 

매력적인망고 (140 포인트) 님이 2021년 5월 30일 질문

1개의 답변

0 추천
JSON serialization/deserialization을 매뉴얼로 하지 마시고 Gson, Moshi 같은 라이브러리를 사용해서 처리하세요. JSONObject를 사용하면 쓸데없는 코드를 작성해줘야 할 뿐더러 정확하게 작성하는데 노력이 많이 투자됩니다.

그리고 Volley 보다는 Retrofit같은 라이브러리를 사용하세요. 요즘은 Retrofit이 거의 표준과 같이 사용됩니다.

그리고 에러메세지는 String타입의JSON 필드값을 JSONObject타입으로 읽으려고 해서 나는 에러입니다.
spark (224,800 포인트) 님이 2021년 5월 30일 답변
spark님이 2021년 5월 31일 수정
...