Autore Topic: Invio Json da app ma applicazione PHP 7 non riceve i dati!!!  (Letto 239 volte)

Offline IL_PAGO

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Honor8
  • Sistema operativo:
    windows
0
 :'( :'( :'( :'(

Ciao a tutti!!!

Sto cercando di inviare Il file JSON dalla mia app richiamando con httpconnect il mio file php che viene trovato e lanciato solo che non riesce a valorizzare le variabili che dovrebbero ricever i valori dal Json!!!!!!
Sto impazzendo ahahahaha!!!!

Qui vi inserisco la classe HttpConnect:
Codice (Java): [Seleziona]
public static HttpURLConnection Connect(String urlAddress) {

        // TODO: Sono nel connect

        HttpURLConnection con;
        try {

            Log.v(TAG, "utilityBOopreation:Connect: entrato nel connect");

            URL url = new URL(urlAddress);
            con = (HttpURLConnection) url.openConnection();

            // set propertis
            con.setRequestMethod("POST");
            con.setConnectTimeout(1000);
            con.setReadTimeout(2000);
          //  con.setRequestProperty("USER-AGENT","Mozilla/5.0");
            con.setDoInput(true);
            con.setDoOutput(true);
          //  Log.v(TAG, "utilityBOopreation:Connect: Valore della connessione :  " + con);

            //return con;


        } catch (MalformedURLException e) {
            e.printStackTrace();
            Log.v(TAG, "utilityBOopreation:Connect: La connessione non è andata a buon fine : " + e);
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            Log.v(TAG, "utilityBOopreation:Connect: La connessione non è andata a buon fine : " + e);
            return null;
        }
        return con;

questa è la classe che  crea il file JSON:
Codice (Java): [Seleziona]
public String packData(){

        Log.v(TAG,"DataPackager:packData: Entro nel packData");

        JSONObject jo= new JSONObject();
        StringBuffer packedData =new StringBuffer();


        try {
            jo.put("ID",Id);
            jo.put("GRM",GRM);
            / .
                 altri campi
             ./


            Boolean FirstValue=true;
            Iterator it=jo.keys();
            Log.v(TAG,"DataPackager:packData: Creo il mio file Json ... " + jo);


            do {
                String Key=it.next().toString();
                String value=jo.get(Key).toString();
                if (FirstValue){
                    FirstValue=false;
                }else {
                    packedData.append("&");
                }

                packedData.append(URLEncoder.encode(Key,"UTF-8"));
                packedData.append("=");
                packedData.append(URLEncoder.encode(value,"UTF-8"));

            }while (it.hasNext());
            Log.v(TAG,"DataPackager:packData: Il packData Prima di mandarlo via stream ... " + packedData);

            return packedData.toString();

        } catch (JSONException | UnsupportedEncodingException e) {
            e.printStackTrace();
            Log.v(TAG,"DataPackager:packData:non sono riuscito a creare il json ... " + e.getMessage());
        }
        return null;
    }

Questo è l'outputstream :
Codice (Java): [Seleziona]
HttpURLConnection con = utilityBOperation.Connect(urlAddress);
      //  Log.v(TAG,"Sender/ send: valore del risultato della connessione al server"+ con);

        if (con==null){
            Log.v(TAG,"Sender: Send : Il risultato del HttpURLConnection è nullo : " + con);
            return null;
        }
        try {
            Log.v(TAG,"Sender: Send : Il risultato del HttpURLConnection non è nullo : " );
            OutputStream os = con.getOutputStream();

            // Write
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
            bw.write(new DataPackager(Id_String,GRM_Family,GRM_Prodoct,MK_Nation,MK_Company).packData());

            Log.v(TAG,"Sender: Send : Il packData è stato inviato ");

            bw.flush();

            // RELEASE RES
           // Verifico i valori dolpo l' invio dei dati
            Log.v(TAG,"Sender: Send : Il risultato del HttpURLConnection " +
                            "Dopo l'invio dello streaming dati : " + con);
            Log.v(TAG,"Sender: Send : Il risultato del outputstreaming : " + os);

            bw.close();
            os.close();

            //HAS IT BEEN SUCCESSFUL?

            int responseCode=con.getResponseCode();

            Log.v(TAG,"Sender: Send : Il valore della risposta dell 'invio al server è:   " + responseCode);
            Log.v(TAG,"Sender: Send : Il valore della risposta dell 'invio al server è:   " + con.getResponseMessage());
            Log.v(TAG,"Sender: Send : Il valore della risposta dell 'invio al server getErrorStream():   " + con.getErrorStream());

            if (responseCode== HTTP_OK){

                //GET EXACT RESPONSE

                Log.v(TAG,"Sender: Send : Il responsecode è  Http_Ok  " + HTTP_OK );
                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                StringBuffer response = new StringBuffer();

                Log.v(TAG,"Sender: Send : Recupero il valore dello StringBUffer : " + response);

                String line;

                //READ LINE BY LINE
                while ((line=br.readLine())!= null){

                    response.append(line);
                }
                // RELEASE RES
                br.close();

                String JsonData = response.toString();
                JSONObject JsonOB = new JSONObject(JsonData);
                JSONArray parentArray = JsonOB.getJSONArray("response");
                JSONObject finalOB = parentArray.getJSONObject(0);

                Log.v(TAG,"Sender: Send : Il valore del Json che ricevo : " + finalOB);

                Find_Place.Rest_Data_to_Json(finalOB);
                return response.toString();

            }else {
                Log.v(TAG,"Sender: Send : La risposta dell 'invio al server è negativa :   " + responseCode);

        }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

questo è il mio file PHP :

Codice: [Seleziona]
$host = 'localhost';
$username = 'user';
$pwd = '';
$db = 'mioDB';

if (isset($_POST)){
 
  $ID = $_POST['ID'];
  $GRM = $_POST['GRM'];
  /
 altri valori
  /
  $response = array();
 
  $connect = mysqli_connect($host,$username,$pwd,$db) or die ('Unabletp connect');

Questo è l' errore che ricevo :

Codice: [Seleziona]
[Sat Mar 24 12:56:42.061845 2018] [php7:notice] [pid 1035] [client 192.168.1.151
:56068] PHP Notice:  Undefined index: ID_ in /var/www/html/Find_First.php
 on line 18

Volevo provare ad inserire :
Codice: [Seleziona]
$json = file_get_contents('php://input');
$obj = json_decode($json);
$id = $obj-> {'ID'};

cosa ne pensate potrebbe essere una soluzione?

Già che ci sono un altra domanda,
Non è che l' errore viene dato dalla conversione in string del mio file Json Prima di inviarlo con outputStream?

Grazie in anticipo
« Ultima modifica: 26 Marzo 2018, 20:44:05 CEST da IL_PAGO »

Offline berpao

  • Utente normale
  • ***
  • Post: 160
  • Respect: +20
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re: Invio Json da app ma applicazione PHP 7 non riceve i dati!!!
« Risposta #1 il: 27 Marzo 2018, 14:09:30 CEST »
0
Ciao IL_PAGO,
vedo che stai ancora litigando con l pagina php :)
Stavo guardando il codice, in particolare la parte che invia i dati; dov'è che gli dici di effettuare la richiesta in POST? perchè nel file php usi $_POST per recuperare i dati, ma se non gli dici niente credo che il defualt sia una richiesta in GET, quindi il $_POST sarà vuoto. Dovresti eventualmente usare in php il $_GET per prendere i dati che inviii...
Ciao
P

Offline IL_PAGO

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Honor8
  • Sistema operativo:
    windows
Re: Invio Json da app ma applicazione PHP 7 non riceve i dati!!!
« Risposta #2 il: 27 Marzo 2018, 15:23:01 CEST »
0
Ciao  berpao!!!!

Orami scriviamo solo noi due ahahha!!!!

In realtà nella mia classe httpconnect lo inserisco il metodo te la riporto:
Codice (Java): [Seleziona]
 HttpURLConnection con;
        try {

            Log.v(TAG, "utilityBOopreation:Connect: entrato nel connect");

            URL url = new URL(urlAddress);
            con = (HttpURLConnection) url.openConnection();

            // set propertis
---->>>            con.setRequestMethod("POST");
            con.setConnectTimeout(1000);
            con.setReadTimeout(2000);
          //  con.setRequestProperty("USER-AGENT","Mozilla/5.0");
            con.setDoInput(true);
            con.setDoOutput(true);
          //  Log.v(TAG, "utilityBOopreation:Connect: Valore della connessione :  " + con);


Ma sinceramente leggendo vari post ho notato che l' errore possa essere nella trasformazione del mio file json in un stringa che scrivo nella classe packdata:

Codice (Java): [Seleziona]
 JSONObject jo= new JSONObject();
        StringBuffer packedData =new StringBuffer();


        try {
            jo.put("ID",Id);
            jo.put("GRM",GRM);
            / .
                 altri campi
             ./


           [u][b] Boolean FirstValue=true;
            Iterator it=jo.keys();
            Log.v(TAG,"DataPackager:packData: Creo il mio file Json ... " + jo);


            do {
                String Key=it.next().toString();
                String value=jo.get(Key).toString();
                if (FirstValue){
                    FirstValue=false;
                }else {
                    packedData.append("&");
                }

                packedData.append(URLEncoder.encode(Key,"UTF-8"));
                packedData.append("=");
                packedData.append(URLEncoder.encode(value,"UTF-8"));

            }while (it.hasNext());[/b][/u]
            Log.v(TAG,"DataPackager:packData: Il packData Prima di mandarlo via stream ... " + packedData);

            return packedData.toString();

anche perchè questa classe mi restituisce una stringa con questi valori :
{ID='Il mio id'&GRM='GRM'....}

Che però non rispecchia il formato json...
Quindi pensavo di elimiare questa conversione tenere il file Json ed inserire nel mio file PHP la dicitura:

$json_a = json_decode(($_POST['una mia etichetta']));
$ID = $decoded['ID'];
 ed eliminando dal codice java la parte di conversione e lasciando solo il file json e d inviare quello:

inserendo il comando 

paramstr= params.getAsString("nome di un etichetta")

come la vedi???
che ne dici?

Si SI mi sto scervellando perchè non capisco sembra che la sintassi sia giusta ma il file php non riesce a leggere l'invio del file >:( >:( >:( >:(


« Ultima modifica: 27 Marzo 2018, 17:39:51 CEST da IL_PAGO »

Offline berpao

  • Utente normale
  • ***
  • Post: 160
  • Respect: +20
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re: Invio Json da app ma applicazione PHP 7 non riceve i dati!!!
« Risposta #3 il: 28 Marzo 2018, 08:40:46 CEST »
0
Ciao,
Citazione
In realtà nella mia classe httpconnect lo inserisco il metodo te la riporto:
Hai ragione, me l'ero perso io

Citazione
anche perchè questa classe mi restituisce una stringa con questi valori :
{ID='Il mio id'&GRM='GRM'....}

Che però non rispecchia il formato json...

Infatti, questo non è json, per validare il tuo json e vedere se sintaticamente corretto puoi usare questo sito web.

Citazione
Quindi pensavo di elimiare questa conversione tenere il file Json ed inserire nel mio file PHP la dicitura:
ti sei un po' complicato la vita,secondo me; per esempio, a meno che non sbaglio ad interpretare il tuo codice, tutto questa parte:

Codice (Java): [Seleziona]
            jo.put("ID",Id);
            jo.put("GRM",GRM);
            / .
                 altri campi
             ./

        Boolean FirstValue=true;
            Iterator it=jo.keys();
            Log.v(TAG,"DataPackager:packData: Creo il mio file Json ... " + jo);


            do {
                String Key=it.next().toString();
                String value=jo.get(Key).toString();
                if (FirstValue){
                    FirstValue=false;
                }else {
                    packedData.append("&");
                }

                packedData.append(URLEncoder.encode(Key,"UTF-8"));
                packedData.append("=");
                packedData.append(URLEncoder.encode(value,"UTF-8"));

            }while (it.hasNext());[/b][/u]

era traducibile in:

Codice (Java): [Seleziona]
            jo.put("ID",Id);
            jo.put("GRM",GRM);
            /*
                 altri campi
             */

           jo.toString();
e il tuo json era costruito formalmente corretto

Citazione
$json_a = json_decode(($_POST['una mia etichetta']));
$ID = $decoded['ID'];

Sembra giusto...

Facci sapere come va
Ciao
P

PS
ricordati di  impostare il content-type della richiesta in "application/json".