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

서버에서json받기-listview출력 - org.json.JSONException에러 ㅠㅠ

0 추천
 class BackgroundTask extends AsyncTask<Void, Void, String> {
        String target;
        JSONObject jsonObject;
        JSONArray jsonArray;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            try {
                target = "http://sanghoboy135.cafe24.com/courseList.php?courseUniversity=" + URLEncoder.encode(courseUniversity, "UTF-8") +
                        "&courseYear=" + URLEncoder.encode(yearSpinner.getSelectedItem().toString().substring(0, 4), "UTF-8") + "&courseTerm=" + URLEncoder.encode(termSpinner.getSelectedItem().toString(), "UTF-8") +
                        "&courseArea=" + URLEncoder.encode(areaSpinner.getSelectedItem().toString(), "UTF-8") + "&courseMajor=" + URLEncoder.encode(majorSpinner.getSelectedItem().toString(), "UTF-8");
                //문제1
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        protected String doInBackground(Void... voids) {
            try {
                URL url = new URL(target);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                if (connection != null) {
                    connection.setRequestMethod("GET");
                    connection.getResponseCode();
                }
                InputStream inputStream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                String temp;
                StringBuilder builder = new StringBuilder();
                while ((temp = reader.readLine()) != null) {
                    builder.append(temp + "\n");
                }
                reader.close();
                inputStream.close();
                connection.disconnect();
                return builder.toString().trim();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);

            Log.d("냐옹", s);
            try {

                JSONObject jsonObject = new JSONObject(s);
                JSONArray jsonArray = jsonObject.getJSONArray("response");

                int count = 0;

                int courseID;
                String courseUniversity;
                int courseYear;
                String courseTerm;
                String courseArea;
                String courseMajor;
                String courseGrade;
                String courseTitle;
                int courseCredit;
                int courseDivide;
                int coursePersonnel;
                String courseProfessor;
                String courseTime;
                String courseRoom;

                courseList = new ArrayList<Course>();

                    while (count < jsonArray.length()) {
                        JSONObject object = jsonArray.getJSONObject(count);

                        courseID = object.getInt("courseID");
                        courseUniversity = object.getString("courseUniversity");
                        courseYear = object.getInt("courseYear");
                        courseTerm = object.getString("courseTerm");
                        courseArea = object.getString("courseArea");
                        courseMajor = object.getString("courseMajor");
                        courseGrade = object.getString("courseGrade");
                        courseTitle = object.getString("courseTitle");
                        courseCredit = object.getInt("courseCredit");
                        courseDivide = object.getInt("courseDivide");
                        coursePersonnel = object.getInt("coursePersonnel");
                        courseProfessor = object.getString("courseProfessor");
                        courseTime = object.getString("courseTime");
                        courseRoom = object.getString("courseRoom");
                        Log.d("냐옹", "고양이");
                        Log.d("냐옹", courseUniversity);
                        Course course = new Course(courseID, courseUniversity, courseYear, courseTerm, courseArea, courseMajor, courseGrade, courseTitle, courseCredit, courseDivide, coursePersonnel, courseProfessor, courseTime, courseRoom);
                        courseList.add(course);


                        count++;
                    }




                //Course course = new Course(1, "학부", 2016, "1학기", "교양및기타", "군사학", "3", "군사학", 2, 1, 0, "허진회", "", "");

                //courseList.add(course);
                adapter = new CourseAdapter(getActivity(), courseList);
                courseListView.setAdapter(adapter);
                /*if(count == 0){
                    AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
                    dialog.setMessage("조회된 강의가 없습니다.")
                            .setPositiveButton("확인", null)
                            .create();
                    dialog.show();
                }
                */
                //adapter.notifyDataSetChanged();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

서버에서 데이터받아온 후 리스트뷰에 출력하려고 합니다.  그런데 postExecute부분에서 자꾸 

W/System.err: org.json.JSONException: Value null of type org.json.JSONObject$1 cannot be converted to JSONObject 이런 에러가 뜹니다. 구글링 해봤는데 exception때문인것같아 여러가지 해봤는데도 안되네요.  데이터는 제대로 불러오고 있습니다. 다만 출력이 안됩니다. 도와주세용 ㅠ

불러온 데이터 정보입니다. 길어서 끝이 잘 안보이지만 "coursePersonnel":"0","courseProfessor":"허진회","courseTime":"","courseRoom":""}]} 이렇게 배열로 끝납니다.

이건 에러창입니다.

개발자가되자! (450 포인트) 님이 2018년 12월 14일 질문

1개의 답변

0 추천
D/야옹: NULL 로 찍힌게 서버에서 받은 메세지앞에 NULL 같은 문자가 들어가 json 파싱을 제대로 수행할수가 없어서

JSONObject jsonObject = new JSONObject(s);  실행 시 jsonObject 값이  null 로 반환되었고,

JSONArray jsonArray = jsonObject.getJSONArray("response");  수행 중 오류가 난것으로 생각됩니다.

서버에서 받은 메세지 앞에 이상한 문자가 있으면 제거부터 하고 수행 해 보세요.
익명사용자 님이 2018년 12월 17일 답변
...