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

안드로이드와 php jsonArray 전송 문제

0 추천

안드로이드에서 학생 정보를 보내고 php에서 받아 서버로 등록하려 하는데 잘안되서 질문드립니다.

php에서 jsonArray를 테스트하기 위해 주석 처리한 부분으로 처리시 서버에 잘 등록되는데 안드로이드와 연동시 작동하질 않습니다. 

StringRequest stringrequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        try{
            JSONObject jResponse = new JSONObject(response.substring(response.indexOf("{"), response.lastIndexOf("}") + 1));
            boolean success = jResponse.getBoolean("success");

            if(success) {
                finish();
            }else{
                AlertDialog.Builder builder = new AlertDialog.Builder(ReservationActivity.this);
                AlertDialog dialog = builder.setMessage("신청이 되지 않았습니다.\n다시 등록해주세요.")
                        .setNegativeButton("확인", null).create();
                dialog.show();
            }
        }catch(JSONException e){
            e.printStackTrace();
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.d("mytest", error.toString());
    }
}) {
    protected Map<String, String> getParams() throws AuthFailureError {

        /*String temp = "";
        for(int i=0; i < list.size(); i++){
            if(!temp.equals("")){
                temp = temp + ",";
            }
            temp = temp + "{\"name\""+":"+"\""+list.get(i).getName()+"\""+","
                    +"\"id\""+":"+"\""+list.get(i).getID()+"\""+"}";
        }

        String complete = "["+temp+"]";*/


        JSONArray jArray;
        try {
            jArray = new JSONArray();//배열이 필요할때
            for (int i = 0; i < list.size(); i++) {
                JSONObject sObject = new JSONObject();//배열 내에 들어갈 json
                sObject.put("name", list.get(i).getName());
                sObject.put("id", list.get(i).getID());
                jArray.put(sObject);
            }
            complete = jArray.toString();
            Log.d("JSON Test", jArray.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
        
        Map<String, String> parameters = new HashMap<>();
        parameters.put("reserveID", reserveID);
        parameters.put("reserveDate", reserveDate);
        parameters.put("startTime", startTime);
        parameters.put("endTime", endTime);
        parameters.put("srID", srID);
        parameters.put("studentID", studentID);
        parameters.put("companionList", complete);
        //Log.d("mytest", complete);

        return parameters;
    }
};

RequestQueue queue = Volley.newRequestQueue(ReservationActivity.this);
queue.add(stringrequest);

<?php

$con = mysqli_connect("localhost", "root", "apmsetup", "studyroom");

 

//$companionList = '[{"name":"홍길동","id":"2019000001"},{"name":"홍지은","id":"2019000002"},{"name":"홍지현","id":"2019000003"}]';

$reserveID = $_POST["reserveID"];

$reserveDate = $_POST["reserveDate"];

$startTime = $_POST["startTime"];

$endTime = $_POST["endTime"];

$srID = $_POST["srID"];

$studentID = $_POST["studentID"];

$companionList = $_POST["companionList"];

$new_array = json_decode($companionList, true);

 

foreach($new_array as $row){

$statement = mysqli_prepare ($con, "INSERT INTO reserveinfo(name, studentID, reserveID) VALUES (?,?,?)");

 

mysqli_stmt_bind_param($statement, "sss", $row['name'], $row['id'], $reserveID);

mysqli_stmt_execute($statement);

}

 

$statement = mysqli_prepare ($con, "INSERT INTO reservelist(reserveID, reserveDate, startTime, endTime, srID, studentID) VALUES (?,?,?,?,?,?)");

 

mysqli_stmt_bind_param($statement, "ssssss", $reserveID, $reserveDate, $startTime, $endTime, $srID, $studentID);

mysqli_stmt_execute($statement);

 

$response = array();

$response["success"] = true;

echo json_encode($response);

?>

bene33 (220 포인트) 님이 2019년 11월 25일 질문

답변 달기

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