Error not convert JsonArray

di il
11 risposte

Error not convert JsonArray

Buon giorno a tutti sto tentando di leggere i dati su un db access tramite volley,ma ottengo questo errore:
com.android.volley.ParseError: org.json.JSONException: Value {"tabripa":[{"codice":71754,"costo":58088},{"codice":72262,"costo":0},{"codice":74786,"costo":174264},{"codice":56477,"costo":3873},{"codice":74949,"costo":0},{"codice":58359,"costo":7745},{"codice":76441,"costo":0},{"codice":68551,"costo":7745},{"codice":69208,"costo":25172},{"codice":70113,"costo":15490},{"codice":79740,"costo":1936},{"codice":100082,"costo":0},{"codice":80022,"costo":5809},{"codice":79980,"costo":58088},{"codice":80806,"costo":1936},{"codice":100448,"costo":9681},{"codice":81464,"costo":7745},{"codice":100704,"costo":0}],"success":1} of type org.json.JSONObject cannot be converted to JSONArray
10-12 04:15:11.516 21768-21768/com.example.nio74.riparazioniarraytest2 W/System.err:     at com.android.volley.toolbox.JsonArrayRequest.parseNetworkResponse(JsonArrayRequest.java:70)
Questo è il metodo che sto usando:
public ArrayList<Busta> getList()
    {
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST, json_url,  null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        int count = 0;
                        while (count<response.length())
                        {
                            try {
                                JSONObject  jsonObject = response.getJSONObject(count);
                                Busta busta = new Busta(jsonObject.getString("codice"),jsonObject.getString("costo"));
                                arrayList.add(busta);
                                count++;
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                Toast.makeText(context,"Error....", Toast.LENGTH_SHORT).show();
                error.printStackTrace();

            }
        });
        MySingleton.getInstance(context).addToRequestque(jsonArrayRequest);

        return arrayList;


    }
}
Questa la classe Mysngleton:
public class MySingleton
{
    private static MySingleton mInstance;
    private RequestQueue requestQueue;
    private static Context mCtx;

    public MySingleton(Context context) {
        mCtx = context;
        requestQueue = getRequestQueue();
    }

    public RequestQueue getRequestQueue()
    {
        if (requestQueue == null)
        {
            requestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
        }
        return  requestQueue;
    }

    public static  synchronized  MySingleton getInstance (Context context)
    {
        if(mInstance == null)
        {
            mInstance = new MySingleton(context);
        }
        return  mInstance;
    }
    public <T> void  addToRequestque(Request<T> request)
    {
        requestQueue.add(request);
    }
}

Presumo ci sia qualche carattere strano ma non so come raddrizzarlo se via php(se avete bisogno dello script ditemelo che lo posto) grazie a tutti.

11 Risposte

  • Re: Error not convert JsonArray

    Il problema è che tu fai una JsonArrayRequest quando invece il JSON che ti viene restituito è un JSON object
  • Re: Error not convert JsonArray

    Della ha scritto:


    Il problema è che tu fai una JsonArrayRequest quando invece il JSON che ti viene restituito è un JSON object
    come dovrei fare? io devo riempire un ArrayList, puoi fare un esempio? grazie,forse devo usare JsonObject e non JsonArrayRequest?
  • Re: Error not convert JsonArray

    Non ho mai usato Volley, ma immagino che tu debba usare la classe JsonObjectRequest e, nella callback di successo, aggiungere all'ArrayList i dati che ti servono.
    In particolare suppongo che a te servano le varie associazioni codice-costo, per cui dovresti fare qualcosa del tipo:
    
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(...,
        new Response.Listener<JSONObject>() {
            public void onResponse(JSONObject response) {
                JSONArray data = response.getJSONArray("tabripa");
                for (int i=0; i<data.length(); i++) {
                    JSONObject datum = data.get(i);
                    int codice = datum.get("codice");
                    int costo = datum.get("costo");
                    // aggiungi i dati all'ArrayList in base alle tue necessità
                    ...
                }
            }
        });
    
    Considera comunque che ho scritto il codice "a mano", quindi potrebbero esserci errori, però il succo è quello..
  • Re: Error not convert JsonArray

    Della ha scritto:


    Non ho mai usato Volley, ma immagino che tu debba usare la classe JsonObjectRequest e, nella callback di successo, aggiungere all'ArrayList i dati che ti servono.
    In particolare suppongo che a te servano le varie associazioni codice-costo, per cui dovresti fare qualcosa del tipo:
    
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(...,
        new Response.Listener<JSONObject>() {
            public void onResponse(JSONObject response) {
                JSONArray data = response.getJSONArray("tabripa");
                for (int i=0; i<data.length(); i++) {
                    JSONObject datum = data.get(i);
                    int codice = datum.get("codice");
                    int costo = datum.get("costo");
                    // aggiungi i dati all'ArrayList in base alle tue necessità
                    ...
                }
            }
        });
    
    Considera comunque che ho scritto il codice "a mano", quindi potrebbero esserci errori, però il succo è quello..
    Ho seguito questa guida al minuto 20,e anche su questa usano I JsonArrayRequest http://www.tutorialsbuzz.com/2014/11/android-volley-jsonarray-parsing.html sulle api non vedo documentazione o esempi validi.
  • Re: Error not convert JsonArray

    Chi ha fatto il video ha usato una JsonArrayRequest perché la pagina che lui interroga restituisce... un JSON array!
    Nel tuo caso hai a che fare con un JSON object, per cui DEVI usare una JsonObjectRequest.
  • Re: Error not convert JsonArray

    Della ha scritto:


    Chi ha fatto il video ha usato una JsonArrayRequest perché la pagina che lui interroga restituisce... un JSON array!
    Nel tuo caso hai a che fare con un JSON object, per cui DEVI usare una JsonObjectRequest.
    Questo è il mio script:
    <?php
    
    /* La query SQL, le parentesi quadrate sono
    necessarie solo quando i nomi dei campi presentano spazi */
    $query="select *from tabripa" ;
    
    /* I parametri di connessione */
    $path= "D:/OneDrive/Programmazione/Android/" ;
    $db_name= "dati.mdb" ;
    $dsource=$path.$db_name ;
    $cn_string="Provider=Microsoft.Jet.OLEDB.4.0;" ;
    $cn_string.="Data Source=$dsource;" ;
    $cn_string.="Jet OLEDB:Database Password=gmpa";
    
    
    $response = array();
    
    /* La connessione */
    if (!file_exists($dsource) ){
    
    die("Il database non esiste") ;
    
    }
    $cn= new COM("ADODB.Connection");
    $cn->open($cn_string) ;
    
    /* Istanziamo un oggetto Recordset
    e inviamo la query attraverso
    il metodo Open() */
    $rs= new COM("ADODB.Recordset") ;
    $rs->Open($query,$cn) ;
    
    /* Ciclo per recuperare i valori dal recordset
    EOF= tutto il set di dati è stato esaminato 
    e il cursore è giunto in fondo */
    if (!$rs->EOF) {
        // looping through all results
        // products node
        $response["tabripa"] = array();
        
        while (!$rs->EOF) {
            // temp user array
            $product = array();
            $product["codice"] = $rs -> Fields["Nbusta"]->value;
            $product["costo"] = $rs -> Fields["costo"]->value;
          
    	    $rs -> MoveNext();
    
    
            // push single product into final response array
            array_push($response["tabripa"], $product);
        }
        // success
        $response["success"] = 1;
    
        // echoing JSON response
        echo json_encode($response);
    } else {
        // no products found
        $response["success"] = 0;
        $response["message"] = "No products found";
    
        // echo no users JSON
        echo json_encode($response);
    }
    
    /* Chiusura Recordset (da non farsi nelle query di comando) */
    $rs->Close() ;
    
    /* Pulizia dell’oggetto Recordset */
    //$rs->Release() ;
    //$rs= null ;
    
    
    
    ?>
  • Re: Error not convert JsonArray

    Ricominciamo dal principio. Il tuo script PHP genera il JSON sottostante:
    
    {"tabripa":[{"codice":71754,"costo":58088},{"codice":72262,"costo":0},{"codice":74786,"costo":174264},{"codice":56477,"costo":3873},{"codice":74949,"costo":0},{"codice":58359,"costo":7745},{"codice":76441,"costo":0},{"codice":68551,"costo":7745},{"codice":69208,"costo":25172},{"codice":70113,"costo":15490},{"codice":79740,"costo":1936},{"codice":100082,"costo":0},{"codice":80022,"costo":5809},{"codice":79980,"costo":58088},{"codice":80806,"costo":1936},{"codice":100448,"costo":9681},{"codice":81464,"costo":7745},{"codice":100704,"costo":0}],"success":1}
    
    Questo JSON è corretto (cioè ha tutto quello che ti serve)?
  • Re: Error not convert JsonArray

    Della ha scritto:


    Ricominciamo dal principio. Il tuo script PHP genera il JSON sottostante:
    
    {"tabripa":[{"codice":71754,"costo":58088},{"codice":72262,"costo":0},{"codice":74786,"costo":174264},{"codice":56477,"costo":3873},{"codice":74949,"costo":0},{"codice":58359,"costo":7745},{"codice":76441,"costo":0},{"codice":68551,"costo":7745},{"codice":69208,"costo":25172},{"codice":70113,"costo":15490},{"codice":79740,"costo":1936},{"codice":100082,"costo":0},{"codice":80022,"costo":5809},{"codice":79980,"costo":58088},{"codice":80806,"costo":1936},{"codice":100448,"costo":9681},{"codice":81464,"costo":7745},{"codice":100704,"costo":0}],"success":1}
    
    Questo JSON è corretto (cioè ha tutto quello che ti serve)?
    Si perfetto grazie della pazienza
  • Re: Error not convert JsonArray

    Ok, allora quel JSON è un oggetto, non un array.
    In particolare, l'oggetto ha 2 campi:
  • Re: Error not convert JsonArray

    Della ha scritto:


    Ok, allora quel JSON è un oggetto, non un array.
    In particolare, l'oggetto ha 2 campi:
    Ok Provo
  • Re: Error not convert JsonArray

    Ho fatto cosi e funziona
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, json_url, null,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response)
                        {
                            try {
                                JSONArray data = response.getJSONArray("tabripa");
                                for (int i=0; i<data.length(); i++)
                                {
                                    JSONObject datum = (JSONObject) data.get(i);
                                    Busta busta = new Busta(datum.getString("codice"), datum.getString("costo"));
                                    arrayList.add(busta);
                                }
    
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
    
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(context,"Error....", Toast.LENGTH_SHORT).show();
                    error.printStackTrace();
    
                }
            });
            MySingleton.getInstance(context).addToRequestque(jsonObjectRequest);
    grazie Della
Devi accedere o registrarti per scrivere nel forum
11 risposte