Autore Topic: Consiglio condivisione dati tra sito e app android  (Letto 2120 volte)

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Consiglio condivisione dati tra sito e app android
« il: 15 Febbraio 2012, 23:57:05 CET »
0
Ciao a tutti,

Sto cercando di fare una piccola applicazione che visualizzi dei marker sulla mia mappa dell'applicazione android, che sono gli stessi che poi si vedranno sul sito.

quello che volevo chiedere è qual'è la miglior gestione degli stessi dati, cioè mi spiego meglio, se io aggiungo un marker dal sito questo andrà a finire nel database mysql, la mappa del sito preleva informazioni e prepara un file xml dinamico e li inserisce.

dal lato android io avevo pensato di usare un parser xml che leggeva da questo file xml dinamico ma non funziona perchè credo non faccia in tempo a crearsi nella pagina o perché ho capito male io. ma comunque non mi sembra una cosa molto fluida perché nel momento in cui aumenteranno i dati questo metodo sarà troppo lento.

avete consigli o esperienze passate in questo campo?

Grazie

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
Re:Consiglio condivisione dati tra sito e app android
« Risposta #1 il: 16 Febbraio 2012, 01:24:19 CET »
0
Senza un po' di codice è difficile capire dov'è il problema... :-\
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Re:Consiglio condivisione dati tra sito e app android
« Risposta #2 il: 16 Febbraio 2012, 01:32:54 CET »
0
il codice per quello che ho tentato è questo:

Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                TextView tv = new TextView(this);
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

                        try {
                                String urlString = "file php";
                                URL url = new URL(urlString);
                                java.net.URLConnection conn = url.openConnection();
                               
                                DocumentBuilder db = dbf.newDocumentBuilder();
                                //URL url = new URL("http://pubarena.altervista.org/maps/phpsqlajax_genxml.php");
                                Document document = db.parse(conn.getInputStream());
                                document.getDocumentElement().normalize();
                               
                     /* passiamo il risultato alla TextView per visualizzarli. */
                     
                     
                                Document doc = document;
                               
                                String testo = tv.getText().toString();
                               
                                testo += "zzzzzzzz";
                                // STAMPA
                                testo += walkSis(doc, testo);
                                tv.setText(testo);

                        } catch (ParserConfigurationException e) {
                                e.printStackTrace();  
                        } catch (Exception e) {
                     /* In caso di errore, passiamo l'errore alla TextView. */
                     tv.setText("House abbiamo un problema: \n" + e.getMessage());
                     Log.e("Error", e.toString());
                                e.printStackTrace();
                        }
                       
                /* Montiamo il contenuto della TextView all'interno della View dell'Activity. */
                this.setContentView(tv);
            }
         
                public String walkSis(Node root, String testo){
               
                        root = root.getLastChild();

                        // PER OGNI RIGA
                        for (int i = 0; i < root.getChildNodes().getLength(); i++) {
                                Node libro = root.getChildNodes().item(i);

                                if (libro.getNodeType() == Node.ELEMENT_NODE) {


                                        // PER OGNI COLONNA
                                        for (int j = 0; j < libro.getChildNodes().getLength(); j++) {
                                                Node element = libro.getChildNodes().item(j);
 
                                               
                            if (libro.hasAttributes()) {
                                                if(j == 0){
                                                        Node attribute =  libro.getAttributes().item(0);
                                                        testo += "\n"+ attribute.getTextContent();
                                                        Toast.makeText(this, attribute.getTextContent(), Toast.LENGTH_LONG).show();
                                                        }
                            }
                                                if (element.getNodeType() == Node.ELEMENT_NODE) {  

                                                        testo += "\n"+ element.getTextContent();
                                                }
                                        }

                                        //out.println( "</tr>");
                                }
                        }
                        return testo;
                }

il codice potrebbe essere un pò sporco perché l'ho ripreso da un mio vecchio progetto.

il file php che genera l'xml è quello che da la documentazione di google :

Codice: [Seleziona]
<?php 

require("phpsqlajax_dbinfo.php");

// Start XML file, create parent node

$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);

// Opens a connection to a MySQL server

$connection=mysql_connect (localhost, $username, $password);
if (!$connection) {  die('Not connected : ' . mysql_error());}

// Set the active MySQL database

$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mysql_error());
}

// Select all the rows in the markers table

$query = "SELECT * FROM markers WHERE 1";
$result = mysql_query($query);
if (!$result) { 
  die('Invalid query: ' . mysql_error());
}

header("Content-type: text/xml");

// Iterate through the rows, adding XML nodes for each

while ($row = @mysql_fetch_assoc($result)){ 
  // ADD TO XML DOCUMENT NODE 
  $node = $dom->createElement("marker"); 
  $newnode = $parnode->appendChild($node);   
  $newnode->setAttribute("name",$row['name']);
  $newnode->setAttribute("address", $row['address']); 
  $newnode->setAttribute("lat", $row['lat']); 
  $newnode->setAttribute("lng", $row['lng']); 
  $newnode->setAttribute("type", $row['type']);
}

echo $dom->saveXML();

?>

però non so se è un buon metodo per gestire le coordinate dei punti.

che dici?

Grazie per la risposta comunque

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Consiglio condivisione dati tra sito e app android
« Risposta #3 il: 16 Febbraio 2012, 09:23:37 CET »
0
Mi permetto di farti notare alcune cose, non proprio attinenti alla tua domanda (mi scuso se questo viene considerato OT).

Solitamente si utilizzano dei servizi web con dati trasmessi in formato xml (esempio.. SOAP, XML-RPC) perchè hanno alcuni vantaggi:
1- si creano delle classi/oggetti che vengono mappati alla richiesta/risposta
2- utilizzati assieme ad un db diventa facile richiedere le credenziali di accesso
3- il formato xml garantisce in alcuni casi la compatibilità (dipende da come viene implementato il parser, ovviamente) anche se vengono apportate modifiche
4- si sposta il carico di lavoro dal client al server.

Nessuno di questi casi è coperto dal tuo codice: non utilizzi alcuno standard per chiamare un servizio (tecnicamente non hai un servizio), non verifichi le credenziali di accesso, il tuo parser al momento fa un dump (beh questo è un problema relativo prima o poi userai i dati veri e propri), stai sovraccaricando di lavoro inutile il server.

In una situazione del genere secondo me la cosa migliore sarebbe connettersi al db direttamente dalla tua applicazione android. XML è una inutile complicazione se non sussustono le suddette condizioni.

Tornando IT (mi infastidisco quando chiedo come si fa a fare qualcosa in un certo modo e qualcuno mi dice "falla in un altro modo"...  ti chiedo scusa! ;-) ) per prima cosa verifica che il codice php sia corretto, apri un browser e guarda se viene riportato correttamente un file XML. Esistono anche diversi tool di validazione XML, visual studio già dalla versione 2005 ti permette di aprire un file XML e ti indica subito warnings ed errori. Ma utilizzando una libreria credo che questo non sia un problema.

Una volta che hai stabilito che il "servizio web" funziona concentrati sul parser.

Riguardo ai tuoi dubbi sui marker secondo me l'unica soluzione pratica è lavorare sulle "differenze".
Quando tu fai una richiesta fai in modo di avere come parametro l'ora e data del server (usa un qualunque formato standard) e assicurati che il tuo file php riporti l'ora e data della richiesta.

Così accade che:
- la prima volta che ti connetti passi una data di default (data fittizia che so primo gennaio 2010) e ti vengono restituiti tutti i marker e il tempo corrente
- salvi il tempo corrente (anche come stringa come sharedprefs, così sei sicuro che la prima volta che lanci la app puoi mettere la data fittizia di default)
- salvi tutti i marker in un file sul local storage
- alla seconda richiesta passi il tempo corrente della vecchia richiesta e ripeti i passaggi MODIFICANDO i contenuti del file sul local storage

In questo modo tu ricevi solo le MODIFICHE.

A livello di database è sufficiente aggiungere un campo datetime che si aggiorna ogni volta che la riga viene modificata.

Se hai bisogno di poter cancellare i marker ti basta aggiungere un campo Active che ti dice se il marker è attivo o meno. Aggiungi (e riporta) anche un ID in modo da sapere subito quale maker è stato modificato.

In questo modo quando vai a leggere le modifiche e trovi un marker disabilitato ti basta cercarlo e disabilitarlo.

Tra l'altro caricando da locale il 90% dei marker la tua applicazione sarà più veloce e il tuo server soffrirà molto meno poichè il tempo richiesto per riportare l'xml sarà minore.

E' importante che il tempo sia gestito al 100% dal server in modo trasparente (per te deve essere solo una stringa) perchè così ti eviti qualsiasi problema di fuso orario, orologi non sincronizzati, etc. Il tempo valido è solo ed esclusivamente quello del server indipendentemente dal fatto che il client sia a new york o in australia.

 :-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
R: Consiglio condivisione dati tra sito e app android
« Risposta #4 il: 16 Febbraio 2012, 09:24:24 CET »
0
Io fossi in te prenderei in considerazione l'utilizzo di json al posto di XML.

Inviato dal mio HTC Desire usando Tapatalk

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Re:Consiglio condivisione dati tra sito e app android
« Risposta #5 il: 16 Febbraio 2012, 13:29:56 CET »
0
Grazie a entrambi per i suggerimenti,

@undead
era proprio questo tipo di consiglio che cercavo, e effettivamente mi ispira molto e mi sembra anche molto efficiente, hai qualche fonte su cui potrei studiarmi qualcosa? grazie mille

per il codice del file php funziona perfettamente, alla fine la fonte è google stessa, mi viene visualizzata la pagina con l'xml e il parser funziona con un semplice file xml "fisico" diciamo.

credo non sia semplicemente fattibile fare un parser di qualcosa di volatile.

@Ricky`
Avevo preso in considerazione anche quell'opzione, ma correggimi se sbaglio, non è come se io chiedessi al server di fornirmi i dati e poi comunque dovrei gestirli con un qualche tipo di "parser". (probabilmente ho detto una castronata....dando una veloce lettura al tutorial che c'è su questo forum).

Grazie ancora a entrambi

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Consiglio condivisione dati tra sito e app android
« Risposta #6 il: 16 Febbraio 2012, 18:43:07 CET »
0
per il json ci sono le librerie gia dentro il framework android.
Oltretutto il json è piu leggero dell'xml, è quindi anche piu "veloce" da parsare (non è sempre vero, ma in generale diciamo così)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Consiglio condivisione dati tra sito e app android
« Risposta #7 il: 17 Febbraio 2012, 12:47:52 CET »
0

@undead
era proprio questo tipo di consiglio che cercavo, e effettivamente mi ispira molto e mi sembra anche molto efficiente, hai qualche fonte su cui potrei studiarmi qualcosa? grazie mille

Per MySQL banalmente:

http://dev.mysql.com/doc/

Ma dovresti poter trovare esempi e tutorial in giro. Tra l'altro ci sono client come HeidiSQL (free) che con due click ti permettono di impostare campi che si autoaggiornano o in che si autoincrementano.

http://www.heidisql.com/

Per quanto riguarda la parte android devi stabilire cosa ti serve.
Se vuoi farti un formato custom puoi salvare il file dove vuoi (mem interna o SD se disponibile) altrimenti n teoria potresti anche farti un database SQLite quasi "speculare", almeno hai un doppio vantaggio: non solo riusi le query ma non hai nemmeno bisogno di fare chissà quale volo pindarico col file per ricostruire tutto quanto.

Diciamo che la fase di sincronizzazione potrebbe funzionare in questo modo.
lettura MySQL server->XML/JSON delle differenze->scrittura SQLite locale
A quel punto rileggi i mark (quelli attivi) dal DB locale e li converti in una tua struttura.

 :-)

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Re:Consiglio condivisione dati tra sito e app android
« Risposta #8 il: 18 Febbraio 2012, 01:36:33 CET »
0

Diciamo che la fase di sincronizzazione potrebbe funzionare in questo modo.
lettura MySQL server->XML/JSON delle differenze->scrittura SQLite locale
A quel punto rileggi i mark (quelli attivi) dal DB locale e li converti in una tua struttura.

 :-)

Ciao, non mi ero accorto della tua risposta ma stavo comunque cercando di arrivare a una soluzione simile, ora ho implementato sia il database server che quello locale (è identico),
quello che però ora mi blocca è l'effetto che potrebbe avere la sincronizzazione dei due database, avendo comunque un numero limitato di query al giorno usando un host free per il sito.

I marker sostanzialmente potrebbero avere poche modifiche quindi pensarla come due database separati (locale e "sito") andrebbe bene, ma dovrei pensare anche al fatto che inserirò la possibilità di mettere "like" sul marker o opinioni nel caso.
Quindi andrei a riavere il problema di gestione del traffico.

In ogni caso quando mi consigli di fare "lettura MySQL server->XML/JSON delle differenze->scrittura SQLite locale"
le differenze come andresti a controllarle?
con un file di appoggio dove mi segno se la versione del record è cambiata?

Grazie infinite per i consigli
 :-P

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Consiglio condivisione dati tra sito e app android
« Risposta #9 il: 20 Febbraio 2012, 13:28:55 CET »
0
Scusa il ritardo ma nel weekend ero poco presente!

Nella tabella dei marker metti un campo ID autoincrementante e lo imposti come chiave primaria.
Metti un campo autoaggiornante con la data dell'ultima modifica (se aggiungi viene messa la data di creazione).

Fai in modo di farti riportare anche il tempo del server in xml/json e lo salvi dove vuoi (tipo nelle sharedpreferences).

Leggere le differenze diventa una semplica questione di fare una select * from markers where ultimamodifica > parametro

Parametro è la data che hai salvato nelle sharedpreferences.

Ovviamente se l'ID esiste sul tuo db locale è stato modificato, se non esiste è nuovo.

Per il numero di query non saprei che dirti, forse l'unico modo per limitare le query è utilizzare il servizio di notifiche push di google (cloud to device messaging) che da descrizione serve a quello. Mai usato ma magari ti può risovlere svariati problemi.

http://code.google.com/android/c2dm/index.html

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Re:Consiglio condivisione dati tra sito e app android
« Risposta #10 il: 20 Febbraio 2012, 15:40:55 CET »
0
ovvio nel week-end ci si rilassa  8-)

Scusa ma ancora non riesco a capire bene cosa intendi, allora:
io ho database locale(sqlite)
database sito (MySql)
i database sono identici.

tabella da controllare => marker con i campi ID nome cognome data

quando faccio il check controllo se la data del singolo record del database locale sia uguale (maggiore è + aggiornato... minore è meno aggiornato).
giusto?

così modifico solo singoli record e non tutto il database.

ma mi sa che non è come dici tu  :-\

scusa se ti faccio ripetere per l'ennesima volta il concetto ma questo problema mi sta sorgendo anche su un'altra applicazione e quindi una volta capito come fare ti faccio una statua eheh  :D

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Consiglio condivisione dati tra sito e app android
« Risposta #11 il: 20 Febbraio 2012, 16:03:18 CET »
+1
Io me la immaginavo così:

- se è il primo avvio imposti una data fittizia nelle sharedpreferences (tipo primo gennaio 2010 a mezzanotte) altrimenti leggi la data che hai salvato
- fai la tua richiesta al servizio web (SOAP o altro) passando la suddetta data
- il server fa una select su tutti i marker che hanno ultimoaggiornamento > della data che hai passato (cioè solo quelli NON SINCRONIZZATI) e ti riporta i marker (XML/JSON o altro) e il tempo corrente del server (il tempo corrente prendilo PRIMA della select)
- a questo punto in locale salvi il tempo del server come data di ultimo aggiornamento (sharedpreferences) e per ogni marker fai una select con quell'id sul tuo db locale.

Hai due casi possibili
- se non esiste (risultato null) aggiungi il marker perchè è nuovo
- se invece esiste aggiorni i campi del marker

Ovviamente sul tuo db locale devi avere un ID come chiave primaria ma non deve essere autoincrementante bensì lo setti tu a mano con l'ID che ti restituisce il server. In teoria (a meno che tu non voglia mostrare agli utenti la data di aggiornamento del marker) non hai nemmeno bisogno di aggiornare/passare il campo ultimoaggiornamento.

 ;-)

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Re:Consiglio condivisione dati tra sito e app android
« Risposta #12 il: 20 Febbraio 2012, 16:07:18 CET »
0
gentilissimo a rispondere all'istante :)
effettivamente potevo intuirlo anche prima.

io gli avrei fatto fare un controllo completo inutile invece che filtrare.

in questi giorno vedrò di implementarlo.

e faccio sapere se è andato tutto ok  ;-)

Grazie ancora!!

Offline megauni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Black
  • Sistema operativo:
    Windows 7
Re:Consiglio condivisione dati tra sito e app android
« Risposta #13 il: 14 Maggio 2012, 10:20:50 CEST »
0
Buongiorno a tutti,

Non mi sono scordato di rispondere ma semplicemente solo ora ho avuto il tempo di mettere in pratica i consigli dati, e ovviamente mi sono bloccato su un punto fondamentale:

L'inserimento di nuovi record in mysql (remoto).

Nel caso dovessi creare un nuovo thread fatemelo sapere che provvederò, Grazie (e nel caso scusate).


gironzolando per la rete ho trovato vari spunti e tutorial per implementare l'inserimento e ho deciso di applicare questo tipo:


Codice (Java): [Seleziona]
JSONParser jsonParser = new JSONParser();

        // url to create new product
        private static String url_create_product = "sito/insertsql.php";

        // JSON Node names
        private static final String TAG_SUCCESS = "success";

        public void input(){
               
        // Building Parameters
        List<NameValuePair> params1 = new ArrayList<NameValuePair>();
 
        params1.add(new BasicNameValuePair("id","1111"));
        params1.add(new BasicNameValuePair("nome", "ddd")); // per la chiave name,l'informazine sul nome
        params1.add(new BasicNameValuePair("cognome", "sss"));// per la chiave surnaname, l'informazione sul cognome
        params1.add(new BasicNameValuePair("anni", "99"));
        params1.add(new BasicNameValuePair("resp", "dshhdf"));
        params1.add(new BasicNameValuePair("agg", "204412052012"));
        params1.add(new BasicNameValuePair("temp1", "p"));
        params1.add(new BasicNameValuePair("temp2", "p"));
        params1.add(new BasicNameValuePair("temp3", "p"));
       
       
        // getting JSON Object
        // Note that create product url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_create_product,
                "POST", params1);
       
       
        // check log cat for response
        //Log.d("Create Response", json.toString());

        // check for success tag
        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // successfully created product
                Toast.makeText(getApplicationContext(), "OK Test",Toast.LENGTH_SHORT).show();
                // closing this screen
                finish();
            } else {
                // failed to create product
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
                return paramString;

        }


la classe JSONParser è questa:

Codice (Java): [Seleziona]
package ShuffleSoft.pubarena.sepsi;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.util.Log;
 
public class JSONParser {
 
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
 
    // constructor
    public JSONParser() {
 
    }
 
    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) {
 
        // Making HTTP request
        try {
 
            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));
 
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
 
            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);
 
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
                Log.e("Create Response", is.toString());
            }            
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
 
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
 
        // return JSON String
        return jObj;
 
    }
}

mentre il file php a cui mi faccio riferimento è:

Codice (XML): [Seleziona]
<?php
/*
* Following code will create a new product row
* All product details are read from HTTP Post Request
*/
 
// array for JSON response
$response = array();
 
// check for required fields
if (isset($_POST['id']) && isset($_POST['nome']) && isset($_POST['cognome']) && isset($_POST['anni']) && isset($_POST['resp']) && isset($_POST['agg'])&& isset($_POST['temp1']) && isset($_POST['temp2']) && isset($_POST['temp3'])) {
 
        $id = $_POST['id'];
   $nome = $_POST['nome'];
   $cognome = $_POST['cognome'];
   $anni = $_POST['anni'];
        $resp = $_POST['resp'];
        $agg = $_POST['agg'];
        $t1 = $_POST['temp1'];
        $t2 = $_POST['temp2'];
        $t3 = $_POST['temp3'];
 
 
   // include db connect class
   require_once __DIR__ . '/db_connect.php';
 
   // connecting to db
   $db = new DB_CONNECT();
 
   // mysql inserting a new row
   $result = mysql_query("INSERT INTO sepsi(id,nome,cognome,anni,resp,agg) VALUES('$id' , '$nome', '$cognome', '$anni', '$resp', '$agg', '$t1','$t2','$t3')");
 
   // check if row inserted or not
   if ($result) {
       // successfully inserted into database
       $response["success"] = 1;
       $response["message"] = "Product successfully created.";
 
       // echoing JSON response
       echo json_encode($response);
   } else {
       // failed to insert row
       $response["success"] = 0;
       $response["message"] = "Oops! An error occurred.";
 
       // echoing JSON response
       echo json_encode($response);
   }
} else {
   // required field is missing
   $response["success"] = 0;
   $response["message"] = "Required field(s) is missing";
        $response["campi"] = $_POST['id'];
        $response["campi1"] =   $_POST['nome'];
        $response["campi2"] =$_POST['cognome'];
        $response["campi3"] =$_POST['anni'];
        $response["campi4"] =$_POST['resp'];
        $response["campi5"] =$_POST['agg'];
        $response["campi6"] =$_POST['temp1'];
        $response["campi7"] =$_POST['temp2'];
        $response["campi8"] =$_POST['temp3'];
   // echoing JSON response
   echo json_encode($response);
}
?>

purtroppo il logcat non è molto chiaro, nel senso che mi restituisce solo l'errore da php che mi riferisce che i campi che ho inviato sono tutti vuoti

Dove potrei aver sbagliato? devo forse inserirlo in un Task async?

Grazie a tutti