Остановка отладки после выполнения JSONArray JSONObject не может быть выполнена для цикла? - PullRequest
0 голосов
/ 15 декабря 2018

Я новичок в вызове api, я только что попробовал простой пример api вызова с использованием http и пытаюсь поместить его в ListView, но он показывает NULLPointerExecption, я отлаживаю коди отладка останавливается после достижения JSONArray создания объекта?почему я действительно не знаю об этом, я также пытался установить опцию Shinking true / false в gradle файле, но ничего не происходит ...

я включил весь свой проект только в один mainactivity,вот код ...

                JSONArray ja = new JSONArray(data);

                for (int i = 0; i < ja.length(); i++) {
                    JSONObject jo = (JSONObject) ja.get(i);

                    singleParsed = "\n" + "\n" + "NAME : " + jo.get("name") + "\n" +
                            "PASSWORD : " + jo.get("password") + "\n" +
                            "CONTACT : " + jo.get("contact") + "\n" +
                            "COUNTRY : " + jo.get("country") + "\n";

                    dataParsed = dataParsed + singleParsed + "\n";
                }

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            try {
                return ParseMoviesJsonString(dataParsed);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }




        private ArrayList<User> ParseMoviesJsonString(String dataParsed) throws JSONException {

            final String json_name = "name";
            final String json_password = "password";
            final String json_contact = "contact";
            final String json_country = "country";

            ArrayList<User> list = new ArrayList<>();

            JSONObject MovieJson = new JSONObject(dataParsed);//MovieJson got the data and then skipps the followinglines and directly go to onPostExecute
            JSONArray MovieArray = MovieJson.getJSONArray(dataParsed);

            for (int i = 0; i < MovieArray.length(); i++) {

                JSONObject result_movie = MovieArray.getJSONObject(i);
                User movie = new User();
                movie.setU_name(result_movie.getString(json_name));
                movie.setU_password(result_movie.getString(json_password));
                movie.setU_contact(result_movie.getString(json_contact));
                movie.setU_country(result_movie.getString(json_country));

                list.add(movie);
            }
            return list;
        }

        @Override
        protected void onPostExecute(ArrayList<User> list) {// list : null
            super.onPostExecute(list);

            adapter.updateList(list);
            adapter.notifyDataSetChanged();
        }
    }
}

1 Ответ

0 голосов
/ 15 декабря 2018

Просто отредактируйте вашу асинхронную задачу, как указано ниже

   @Override
    protected ArrayList<User> doInBackground(String[] params) {

        try {
            URL url = new URL("https://api.myjson.com/bins/1422e4");

            HttpURLConnection hc = (HttpURLConnection) url.openConnection();
            InputStream is = hc.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));

            while (line != null) {
                line = br.readLine();
                data = data + line;
            }

        /*      JSONArray ja = new JSONArray(data);

          for (int i = 0; i < ja.length(); i++) {
                JSONObject jo = (JSONObject) ja.get(i);

                singleParsed = "\n" + "\n" + "NAME : " + jo.get("name") + "\n" +
                        "PASSWORD : " + jo.get("password") + "\n" +
                        "CONTACT : " + jo.get("contact") + "\n" +
                        "COUNTRY : " + jo.get("country") + "\n";

                dataParsed = dataParsed + singleParsed + "\n";
            }*/

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            return ParseMoviesJsonString(data);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }


    private ArrayList<User> ParseMoviesJsonString(String dataParsed) throws JSONException {

        final String json_name = "name";
        final String json_password = "password";
        final String json_contact = "contact";
        final String json_country = "country";

        ArrayList<User> list = new ArrayList<>();

        JSONArray MovieArray = new JSONArray(dataParsed);

        for (int i = 0; i < MovieArray.length(); i++) {

            JSONObject result_movie = MovieArray.getJSONObject(i);
            User movie = new User();
            movie.setU_name(result_movie.getString(json_name));
            movie.setU_password(result_movie.getString(json_password));
            movie.setU_contact(result_movie.getString(json_contact));
            movie.setU_country(result_movie.getString(json_country));

            list.add(movie);
        }
        return list;
    }

, как указано выше, вы должны прокомментировать код в doinbackground, а также внести некоторые изменения, как при разборе.Вы также можете попробовать использовать библиотеку GSON, и это лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...