Errore Conversione Json

di il
11 risposte

Errore Conversione Json

Buon Giorno a tutti ho un problema con una conversione di una stringa il Risultato JSON è:
{"tabripa":[{"codice":70113,"costo":10000,"pVendita":38725}],"success":1}
Il mio codice è questo:
 private void getData()
    {
        String Nbusta = eTSearch.getText().toString().trim();
        if (Nbusta.equals(""))
        {
            Toast.makeText(this,"Inserire Numero Busta",Toast.LENGTH_LONG).show();
            return;
        }
        pdLoading = ProgressDialog.show(this,"Attendere","Caricamento",false,false);
        String url = Config.DATA_URLNEGOZIO + eTNbusta.getText().toString();
        StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response)
            {
                pdLoading.dismiss();
                showJSON(response);

            }


        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(MainActivity.this,error.getMessage().toString(),Toast.LENGTH_LONG).show();

            }
        });

        MySingleton.getInstance(this).addToRequestQueue(stringRequest);
       // RequestQueue requestQueue = Volley.newRequestQueue(this);
        //requestQueue.add(stringRequest);
    }


    private void showJSON(String response)
    {
        String nBusta ="";
        String costo = "";

        try {

            response = response.replaceFirst("<[>.*?<]>", "");
            JSONObject jsonObject = new JSONObject(response);

            JSONArray result = jsonObject.getJSONArray(Config.JSON_ARRAY);
            JSONObject collegaData = result.getJSONObject(0);

            nBusta = collegaData.getString(Config.KEY_NBUSTA);
            costo = collegaData.getString(Config.KEY_COSTO);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        eTNbusta.setText(nBusta);
        eTCosto.setText(costo);

    }
ho provato a rimuovere le parentesi quadre credendo che fosse per quello che non mi dava un oggetto corretto ma niente da fare.

Errore:
0-20 17:21:01.152 5852-5852/? W/System.err: org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject

11 Risposte

  • Re: Errore Conversione Json

    Aggiornamanto ho provato a togliere <br con
    response = response.replaceFirst("<br", "");
    ora l'errore è questo:
    org.json.JSONException: Expected literal value at character 1 of  />
    W/System.err: <b>Fatal error</b>:  Uncaught exception 'com_exception' with message '<b>Source:</b> Microsoft JET Database Engine<br/><b>Description:</b> Errore di sintassi (operatore mancante) nell'espressione della query 'Nbusta ='.' in D:\xampp\htdocs\riparazioni\Get_un_prodotto.php:33
    W/System.err: Stack trace:
    W/System.err: #0 D:\xampp\htdocs\riparazioni\Get_un_prodotto.php(33): com->Open('select *from ta...', Object(com))
    W/System.err: #1 {main}
    W/System.err:   thrown in <b>D:\xampp\htdocs\riparazioni\Get_un_prodotto.php</b> on line <b>33</b><br />
    vi posto anche lo script php:
    <?php
    if($_SERVER['REQUEST_METHOD']=='GET'){
    	$Nbusta  = $_GET['Nbusta'];
        
    /* La query SQL, le parentesi quadrate sono
    necessarie solo quando i nomi dei campi presentano spazi */
    $query="select *from tabripa where  Nbusta = $Nbusta" ;
    
    /* 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;
    		//$product["descrizione"] = $rs -> Fields("Descrizione");
    		$product["pVendita"] = $rs -> Fields["vendita"]->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: Errore Conversione Json

    Beh a giudicare dal messaggio c'è un errore di sintassi alla riga 33 del file Get_un_prodotto.php, quindi android non c'entra nulla.

    EDIT: ho visto che nella query manca uno spazio fra l'asterisco della SELECT e la clausola FROM. Questo sicuramente non aiuta
  • Re: Errore Conversione Json

    Della ha scritto:


    Beh a giudicare dal messaggio c'è un errore di sintassi alla riga 33 del file Get_un_prodotto.php, quindi android non c'entra nulla.

    EDIT: ho visto che nella query manca uno spazio fra l'asterisco della SELECT e la clausola FROM. Questo sicuramente non aiuta
    Sembra che legga del codice html "<br" ma io non lo vedo e ho testato la query e funziona, l'unica cosa strana sono le parentesi quadre che di solito non ci sono. Questo è L'URL :http://192.168.3.199/riparazioni/Get_un_prodotto.php?Nbusta=79980

    e questo è il risultato senza errori e senza codice html:
    {"tabripa":[{"Nbusta":79980,"costo":58088,"pVendita":77451}],"success":1}
    L'ho testata su JSONlint è mi da che è valida
  • Re: Errore Conversione Json

    Quel JSON è sicuramente valido, ma bisogna vedere che cosa viene restituito all'applicazione Android. A tal proposito, prova ad inserire la seguente riga all'interno del metodo "onResponse" (nota che bisogna importare la classe android.util.Log):
    
    Log.d("MYAPP", response);
    
    e guarda che cosa compare nel LogCat sotto al tag "MYAPP".
    Secondo me non ti compare il JSON ma un messaggio di errore (e allora bisogna capire il perché)
  • Re: Errore Conversione Json

    Della ha scritto:


    Quel JSON è sicuramente valido, ma bisogna vedere che cosa viene restituito all'applicazione Android. A tal proposito, prova ad inserire la seguente riga all'interno del metodo "onResponse" (nota che bisogna importare la classe android.util.Log):
    
    Log.d("MYAPP", response);
    
    e guarda che cosa compare nel LogCat sotto al tag "MYAPP".
    Secondo me non ti compare il JSON ma un messaggio di errore (e allora bisogna capire il perché)
    D/MYAPP: ?<br />
             <b>Fatal error</b>:  Uncaught exception 'com_exception' with message '<b>Source:</b> Microsoft JET Database Engine<br/><b>Description:</b> Errore di sintassi (operatore mancante) nell'espressione della query 'Nbusta ='.' in D:\xampp\htdocs\riparazioni\Get_un_prodotto.php:33
             Stack trace:
             #0 D:\xampp\htdocs\riparazioni\Get_un_prodotto.php(33): com->Open('select *from ta...', Object(com))
             #1 {main}
               thrown in <b>D:\xampp\htdocs\riparazioni\Get_un_prodotto.php</b> on line <b>33</b><br />
    
  • Re: Errore Conversione Json

    Beh come vedi la query che viene eseguita non è quella attesa perché manca il valore NBusta. Visto che questo valore viene letto dalla richiesta, ne puoi dedurre che la richiesta che fai tramite Volley è errata. Per conferma puoi stampare nel log l'URL che richiami tramite volley.

    Comunque dal punto di vista della sicurezza è altamente sconsigliato di buttare direttamente dentro ad una query i valori che arrivano dall'esterno, perché ad esempio rischi di incappare in una SQL injection.
  • Re: Errore Conversione Json

    Della ha scritto:


    Beh come vedi la query che viene eseguita non è quella attesa perché manca il valore NBusta. Visto che questo valore viene letto dalla richiesta, ne puoi dedurre che la richiesta che fai tramite Volley è errata. Per conferma puoi stampare nel log l'URL che richiami tramite volley.

    Comunque dal punto di vista della sicurezza è altamente sconsigliato di buttare direttamente dentro ad una query i valori che arrivano dall'esterno, perché ad esempio rischi di incappare in una SQL injection.
    Avevi ragione ho sbagliato EditText , ora la vede ma ho un'altro errore, mi dice che non ho nessun valore.
    D/Controllo_URL.....: http://192.168.3.199/riparazioni/Get_un_prodotto.php?Nbusta=80022
    E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7fc767190310
    W/System.err: org.json.JSONException: No value for result
    W/System.err:     at org.json.JSONObject.get(JSONObject.java:389)
    W/System.err:     at org.json.JSONObject.getJSONArray(JSONObject.java:584)
    W/System.err:     at com.example.paolo.myapplication.MainActivity.showJSON(MainActivity.java:99)
    W/System.err:     at com.example.paolo.myapplication.MainActivity.access$100(MainActivity.java:22)
    W/System.err:     at com.example.paolo.myapplication.MainActivity$1.onResponse(MainActivity.java:67)
    W/System.err:     at com.example.paolo.myapplication.MainActivity$1.onResponse(MainActivity.java:60)
    W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:67)
    W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
    W/System.err:     at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
    W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
    W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
    W/System.err:     at android.os.Looper.loop(Looper.java:148)
    W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5417)
    W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
    W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    D/MYAPP: ?{"tabripa":[{"Nbusta":80022,"costo":5809,"pVendita":17426}],"success":1}
    
  • Re: Errore Conversione Json

    No, non dice che non hai nessun valore.
    Dice che non hai nessun valore per la chiave "result", che in effetti non compare nel JSON.
    Per caso la costante JSON_ARRAY è valorizzata a "result"? Se sì, dovresti cambiarla a "tabripa".
  • Re: Errore Conversione Json

    Risolto non avevo impostato il nome della tabella adesso funziona
    JSONArray result = jsonObject.getJSONArray("tabripa");
    Grazie sei stato d'aiuto
  • Re: Errore Conversione Json

    Mi piacerebbe approfondire questo argomento
    Della ha scritto:

    Comunque dal punto di vista della sicurezza è altamente sconsigliato di buttare direttamente dentro ad una query i valori che arrivano dall'esterno, perché ad esempio rischi di incappare in una SQL injection.
    Come si potrebbe fare Per capire meglio?
  • Re: Errore Conversione Json



    Per la questione SQL injection la cosa migliore sarebbe usare i prepared statements (non ho mai usato ADODb né COM, quindi non so se li supporti o meno), oppure fare un minimo di filtraggio dell'input (anche se comunque la soluzione migliore è quella dei prepared statements)
Devi accedere o registrarti per scrivere nel forum
11 risposte