Autore Topic: AsyncHttpClient con metodo post  (Letto 1087 volte)

Offline nicozumel

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Huawei - P7
  • Sistema operativo:
    Windows 7
AsyncHttpClient con metodo post
« il: 21 Febbraio 2016, 14:36:17 CET »
0
Ciao a tutti,
sto utlizzando il package com.loopj.android.http x le mie chiamate http che eseguono comandi per un db mysql.
Vorrei utilizzare il metodo post x il passaggio dei parametri ma dal lato php questi parametri non arrivano...con il get invece nessun problema (poichè passo tali parametri nell'indirizzo.)
Codice (Java): [Seleziona]
RequestParams params = new RequestParams();
                params.put("Fields", fields);
                params.put("TableName", tableName);
                params.put("WhereClause", whereClause);

                //*** istanza del client ***
                 AsyncHttpClient client = new AsyncHttpClient();

                String url = "http://xxx.org/yyy/selectPost.php";
                client.get(url, params,new JsonHttpResponseHandler()
                                                        {
                                                        @Override
                                                        public void onSuccess(int statusCode, Header[] headers, JSONObject response)
.
.
.
                                       
purtroppo mi da errore del server 301, credo nn vengano passati tali parametri alla pagina php che risulta come segue:
Codice: [Seleziona]
<?php
$link = mysql_connect("bb.aaa.xxx.yyy","aaaaa","sxadsds","Sql123");
mysql_select_db("Sql123");

$Fields= $_POST['Fields'];

$TableName= $_POST['TableName'];

$WhereClause= $_POST['WhereClause'];

$help = urldecode($WhereClause);

$q=mysql_query($link, "SELECT ".$Fields." FROM ".$TableName.$help);

while($e=mysql_fetch_assoc($q))
{
            $encodedArray = array_map(utf8_encode, $e);
        $output[]=$encodedArray;
}

print(json_encode($output));

mysql_close();
?>
Ho appena aggiornato la versione del package al android-async-http-1.4.9.jar sperando fosse la soluzione ma il problema mi persiste.
dove posso sbagliare ? sarei propenso a pensare che il problema sia nella pagina php poiche dal lato android l'esempio che ho utilizzato è uguale a molti altri trovati in rete.
Grazie x qualsiasi suggerimento
Nic


Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:AsyncHttpClient con metodo post
« Risposta #1 il: 21 Febbraio 2016, 17:31:32 CET »
0
Paura. Sto ultimando un app tutta di get per comodità e domani dovrei mettere tutti i post. Se non funziona sono mesi di lavoro ;)

Offline nicozumel

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Huawei - P7
  • Sistema operativo:
    Windows 7
Re:AsyncHttpClient con metodo post
« Risposta #2 il: 23 Febbraio 2016, 00:08:57 CET »
0
Ciao Tonno16,
io a dire il vero, sono mesi che uso solo il get (con relativi parametri passati in chiaro nell'url dell'indirizzo!) e questo, nn mi è mai piaciuto x niente, ma solo perchè a me, il Post, nn è mai funzionato. Se a a te dovesse funzionare, ti chiedo la grande cortesia di farmi vedere come tu abbia fatto...
grazie mille
ciao

Offline zezzo

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +3
    • Mostra profilo
Re:AsyncHttpClient con metodo post
« Risposta #3 il: 27 Febbraio 2016, 18:51:36 CET »
0
Non conosco la libreria in questione, ma il tuo client http dovrebbe avere oltre al metodo get anche gli altri http verbs (post, put, delete ecc),
come c'è "client.get(url, params,new JsonHttpResponseHandler()" presumo ci sia "client.post(url, parms, ecc ecc)". Prova a vedere nella guida della libreria.

Se non modifichi lo script sostituendo il $_POST di PHP sarà sempre vuoto visto che le tua richiesta è una Get.

P.S. magari è solo un test il tuo, ma non è una buona idea passare il nome tabella nelle variabili.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:AsyncHttpClient con metodo post
« Risposta #4 il: 28 Febbraio 2016, 13:39:39 CET »
0
Se il server ti restituisce 301 mi sembra strano che il problema sia relativo a come passi i parametri. 301 infatti significa "Moved permanently" e mi sembra qualcosa che si riferisce a un problema con il webserver.
Lo script funziona se lo invochi manualmente (ad esempio utilizzando https://www.getpostman.com)?

Offline nicozumel

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Huawei - P7
  • Sistema operativo:
    Windows 7
Re:AsyncHttpClient con metodo post
« Risposta #5 il: 29 Febbraio 2016, 23:19:05 CET »
0
Non conosco la libreria in questione, ma il tuo client http dovrebbe avere oltre al metodo get anche gli altri http verbs (post, put, delete ecc),
come c'è "client.get(url, params,new JsonHttpResponseHandler()" presumo ci sia "client.post(url, parms, ecc ecc)". Prova a vedere nella guida della libreria.

Se non modifichi lo script sostituendo il $_POST di PHP sarà sempre vuoto visto che le tua richiesta è una Get.

P.S. magari è solo un test il tuo, ma non è una buona idea passare il nome tabella nelle variabili.
Ciao, si hai perfettamente ragione, nell'esempio da me riportato faccio uso del metodo get...ma ho sbagliato esempio, infatti con tale libreria uso ovviamente il metodo post:
Codice (Java): [Seleziona]
client.post(url, params,new JsonHttpResponseHandler()
                                                        {
                                                        @Override
                                                        public void onSuccess(int statusCode, Header[] headers, JSONObject response)
Ma purtroppo il risultato nn cambia il POST nn passa i dati...mahhh io comunque continuo ad usare il get con i parametri passati in chiaro, ma la curiosità di capire cos'è che nn va permane...

Offline zezzo

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +3
    • Mostra profilo
Re:AsyncHttpClient con metodo post
« Risposta #6 il: 29 Febbraio 2016, 23:47:06 CET »
0
Cioè, allo stesso url, ricevi uno status code 301(errore) se fai una richiesta post, e se la fai get ricevi status code 200(tt ok)?
Non si capisce bene come stanno le cose... diventa difficile darti una mano.

Hai provato con il consiglio di @Ricky usare postman o anche curl da terminale.

Offline mtdv

  • Utente junior
  • **
  • Post: 103
  • Respect: 0
    • Mostra profilo
Re:AsyncHttpClient con metodo post
« Risposta #7 il: 01 Marzo 2016, 10:16:10 CET »
0
Ciao scusa una cosa in che formato li vuoi inviare i dati al server??
ad esempio in json o in cosa??
se in json devi anche settare questo:

params.setUseJsonStreamer(true);

però come ti hanno già detto altri prima di me, dovrebbe essere un problema server e non client
spero di esserti stato d'aiuto.
« Ultima modifica: 01 Marzo 2016, 10:18:32 CET da mtdv »

Offline nicozumel

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Huawei - P7
  • Sistema operativo:
    Windows 7
Re:AsyncHttpClient con metodo post
« Risposta #8 il: 05 Giugno 2016, 18:25:11 CEST »
0
Ciao
 e scusatemi per il rittardo. Nel frattempo, pensando potesse essere un problema delle API com.loopj.android.http, ho voluto cambiare totalmente approccio,  utilizzando la classe proprietaria java.net.HttpURLConnection...e quindi Vi illustro il mio nuovo tentativo:
Codice (Java): [Seleziona]
public static void makeRequest( final String  fields, final String tableName, final String whereClause) {
                Thread t = new Thread(new Runnable()
                {
                        @Override
                        public void run() {
                                String result = null;
                                JSONObject jsonObj = new JSONObject();
                                try
                                {
                                        jsonObj.put("fields", fields);
                                        jsonObj.put("tablename", tableName);
                                        jsonObj.put("whereclause", whereClause);
                                } catch (
                                                JSONException e
                                                )
                                {
                                        e.printStackTrace();
                                }
                                String data = jsonObj.toString();

                                HttpURLConnection urlConnection;
                                try
                                {
                                        //Connect
                                        urlConnection = (HttpURLConnection) ((new URL("http://miosito.org/FolderApp/selectPost.php").openConnection()));
                                        urlConnection.setDoOutput(true);
                                        urlConnection.setRequestProperty("Content-Type", "application/json");
                                        urlConnection.setRequestProperty("Accept", "application/json");
                                        urlConnection.setRequestMethod("POST");
                                        urlConnection.setDoInput(true);
                                        urlConnection.setDoOutput(true);

                                        //Write (passo il jsonObj)
                                        OutputStream outputStream = urlConnection.getOutputStream();
                                        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                                        writer.write(data);
                                        writer.flush();
                                        writer.close();
                                        outputStream.close();

                                        urlConnection.connect();

                                        //Leggo risultati
                                        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
                                        String line = null;
                                        StringBuilder sb = new StringBuilder();

                                        while ((line = bufferedReader.readLine()) != null) {
                                                sb.append(line);
                                        }

                                        bufferedReader.close();
                                        result = sb.toString();
                                }
                                catch   (UnsupportedEncodingException e)
                                {
                                        e.printStackTrace();
                                }
                                catch (IOException e)
                                {
                                        e.printStackTrace();
                                }
                        }
                });
                t.start();
        }
La pagina php che esegue la query:
Codice: [Seleziona]
<?php

mysql_connect("xx.xxx.xxx.190","User","pwd","MySql_DB");
mysql_select_db("MySql_DB");

$Fields= $_POST['fields'];

$TableName= $_POST['tableNanme'];

$WhereClause= $_POST['whereclause'];
$help = urldecode($whereclause);


$q=mysql_query("SELECT ".$Fields." FROM ".$TableName.$help);

while($e=mysql_fetch_assoc($q))
{
            $encodedArray = array_map(utf8_encode, $e);
        $output[]=$encodedArray;
}
print(json_encode($output));
mysql_close();
?>

Ma purtroppo sono alle solite, la pagina nn riceve i parametri passati tramite post e da il seguente errore:
<b>Warning</b>:  mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in <b>/web/htdocs/www.miposito.org/home/FolderApp/selectPost.php</b> on line <b>26</b><br />

cioè in altre parole nn esegue la qry perchè i parametri che la costituiscono sono vuoti.

La cosa curiosa è che un mio collega creando una App con windows 10 in ambiente .net nn riscontra alcun problema nell utlizzo di chiamate POST.
Per la cronaca il Web provider è Aruba, quindi un ottimo servizio web, veloce e affidabile.
Il mistero resta irrisolto...
Grazie
Nicola




Offline marcusfenixx

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Sistema operativo:
    Windows 7
Re:AsyncHttpClient con metodo post
« Risposta #9 il: 21 Agosto 2016, 13:54:57 CEST »
0
Concordo con gli altri utenti provando con Postman quale il risultato e sopratutto arrivano vuoti anche in quel caso ?

Sent from my MX4 using Tapatalk