J'ai regardé le tutoriel slidenerd sur youtube. Je veux obtenir json. Je ne peux pas avoir mon json. Je pense que le problème est quand j'analyse json mais je ne peux pas le voir. Ceci est ma méthode de demande

    public static JSONObject requestMoviesJSON(RequestQueue requestQueue, String url) {
    JSONObject response = null;
    RequestFuture<JSONObject> requestFuture = RequestFuture.newFuture();

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,
            url,
            (String)null, requestFuture, requestFuture);

    requestQueue.add(request);
    try {
        response = requestFuture.get(30000, TimeUnit.MILLISECONDS);
    } catch (InterruptedException e) {
        L.m(e + "");
    } catch (ExecutionException e) {
        L.m(e + "");
    } catch (TimeoutException e) {
        L.m(e + "");
    }
    return response;
}

C'est comme ça que j'obtiens une réponse

    JSONObject response = Requestor.requestMoviesJSON(requestQueue, "http://my_url");
    ArrayList<Milkbox> listMilkboxes = Parser.parseMilkboxesJSON(response);

Ceci est ma fonction d'analyse

parseMilkboxesJSON(JSONObject response) {
    ArrayList<Milkbox> listMilkbox = new ArrayList<>();

    if (response != null && response.length() > 0) {
        try {
            JSONArray arrayMilkboxes = new JSONArray(response);

            for (int i = 0; i < arrayMilkboxes.length(); i++) {
                int id = -1;
                long phone = -1L;
                long imei = -1L;
                String city = Constants.NA;
                String address = Constants.NA;

                JSONObject currentMilkbox = arrayMilkboxes.getJSONObject(i);

                id = currentMilkbox.getInt(KEY_ID);
                phone = currentMilkbox.getLong(KEY_PHONE);
                imei = currentMilkbox.getLong(KEY_IMEI);
                city = currentMilkbox.getString(KEY_CITY);
                address = currentMilkbox.getString(KEY_ADDRESS);


                Milkbox milkbox = new Milkbox();
                milkbox.set_id(id);
                milkbox.set_phone(phone);
                milkbox.set_imei(imei);
                milkbox.set_city(city);
                milkbox.set_address(address);

                listMilkbox.add(milkbox);
                text = id + " " + phone + " " + imei + " " + city + " " + address;
            }

        } catch (JSONException e) {

        }
        //      L.t(getActivity(), listMovies.size() + " rows fetched");
    }

    return listMilkbox;
}

Je ne sais pas si c'est correct de le faire JSONArray arrayMilkboxes = new JSONArray(response);. Les gars, est-ce que la façon dont je l'analyse est correcte?

-3
Karen Alex 29 déc. 2015 à 14:51

2 réponses

Meilleure réponse

Je ne vous vois pas déclarer KEY_ID comme une chaîne constante, donc je suppose que vous voulez utiliser KEY_ID comme jeton pour obtenir votre valeur entière. Par conséquent, tout ce que vous avez à faire est d'ajouter "" autour de vos jetons. Les méthodes d'un JSONObject ont besoin d'une chaîne comme arguments pour récupérer des jetons.

Milkbox milkbox = new Milkbox();
milkbox.set_id( currentMilkbox.getInt("KEY_ID") );
milkbox.set_phone( currentMilkbox.getLong("KEY_PHONE") );
milkbox.set_imei( currentMilkbox.getLong("KEY_IMEI") );
milkbox.set_city( currentMilkbox.getString("KEY_CITY") );
milkbox.set_address( currentMilkbox.getString("KEY_ADDRESS") );
1
Jon Le 29 déc. 2015 à 12:07

Non, ce n'est pas votre analyse JSONObject en JSONArray, récupérez votre réponse dans String puis analysez-la JSONArray

Public void requestMoviesJSON (RequestQueue requestQueue, String url) {

    public void requestMoviesJSON(RequestQueue requestQueue, String url) {
    StringRequest jobj = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            ArrayList<Milkbox> listMilkbox = new ArrayList<>();

            if (response != null && response.length() > 0) {
                try {

                    JSONArray arrayMilkboxes = new JSONArray(response);

                    for (int i = 0; i < arrayMilkboxes.length(); i++) {
                        int id = -1;
                        long phone = -1L;
                        long imei = -1L;
                        String city = Constants.NA;
                        String address = Constants.NA;

                        JSONObject currentMilkbox = arrayMilkboxes.getJSONObject(i);

                        id = currentMilkbox.getInt(KEY_ID);
                        phone = currentMilkbox.getLong(KEY_PHONE);
                        imei = currentMilkbox.getLong(KEY_IMEI);
                        city = currentMilkbox.getString(KEY_CITY);
                        address = currentMilkbox.getString(KEY_ADDRESS);


                        Milkbox milkbox = new Milkbox();
                        milkbox.set_id(id);
                        milkbox.set_phone(phone);
                        milkbox.set_imei(imei);
                        milkbox.set_city(city);
                        milkbox.set_address(address);

                        listMilkbox.add(milkbox);
                        text = id + " " + phone + " " + imei + " " + city + " " + address;
                    }
                } catch (JSONException e) {

                }
                //      L.t(getActivity(), listMovies.size() + " rows fetched");
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            volleyError.printStackTrace();

        }
    });
    jobj.setRetryPolicy(new DefaultRetryPolicy(
            DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 3,
            0,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    requestQueue.add(jobj);
}

Et maintenant appelez requestMoviesJSON (requestQueue, url) méthed où vous voulez faire un appel réseau.

4
Rohit Raich 29 déc. 2015 à 13:23