Autore Topic: leggere dati json inviati da device al server  (Letto 2260 volte)

Offline stefy89

  • Nuovo arrivato
  • *
  • Post: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    windows 7
leggere dati json inviati da device al server
« il: 24 Gennaio 2015, 18:40:14 CET »
Ciao ragazzi, mi sono imbattuta in un intoppo. Sto cercando di interfacciare il mio android con un database phpmyadmin. Ora le mie richieste sono passate attraverso il metodo json. Alla mia prima richiesta(mostrarmi tutti i campi di una tabella) e visualizzarmeli in un menù della mia activity, nessun problema, ora in base alla scelta dal mio menù vorrei aprire una sottoselezione con un particolare campo della mia tabella(ovvero mostrarmi tutti i campi di un'altra tabella che abbia in comune il valore di un campo! Questo campo lo passo sempre tramite url json

List<NameValuePair> params = new ArrayList<NameValuePair>();
         params.add(new BasicNameValuePair("azienda", azienda));
         
         // ottenendo stringa JSON da URL
         JSONObject json = jParser.makeHttpRequest("http://pippopippo.org/dettaglio.php", "GET", params);

ora dovrei creare un file php lato sever che mi raccolga il mio dettaglio(azienda) e mi faccia una query in un'altra tabella in cui mi mostri solo gli elementi di quella tabella appartenenti ad "azienda"=azienda.

activity.java:
Codice (Java): [Seleziona]
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.os.Build;

public class TenutaActivity extends ListActivity   {

        public static final String TAG_PRODOTTO = "prodotto";
        String prodotto;
               
        String id_tenuta;
        String nome;
        String luogo;
        String azienda;
       
       
        // Progress Dialog
        private ProgressDialog pDialog;
       
        // crea JSON Parser oggetto
        JSONParser jParser = new JSONParser();

        ArrayList<HashMap<String, String>> classList;

        // url per lista
       

        // JSON nomi
        private static final String TAG_SUCCESS = "success";
        private static final String TAG_CLASS = "class";
        private static final String TAG_ID_TENUTA= "id_tenuta";
        private static final String TAG_NOME = "nome";
        private static final String TAG_LUOGO = "luogo";
        private static final String TAG_AZIENDA = "azienda";

       
        // produci una JSONArray
        JSONArray operators = null;
       
       
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_tenuta);
                Intent i = getIntent();
                prodotto = i.getStringExtra(TAG_PRODOTTO);
                azienda = i.getStringExtra(TAG_AZIENDA);
                                               
                // Hashmap per ListView
                classList = new ArrayList<HashMap<String, String>>();
               
                TextView Tazienda = (TextView) findViewById (R.id.azienda);
                Tazienda.setText(azienda);
                       

                // Caricamento dei record
                new LoadAllOperators().execute();
               

                // ottieni una listview
                ListView lv = getListView();

                // selezione dei singoli record
                // lancia modifica record
                lv.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                                // ottenendo valori da ListItem selezionato
                                 id_tenuta = ((TextView) view.findViewById(R.id.id_op)).getText().toString();
                                 nome = ((TextView) view.findViewById(R.id.nome)).getText().toString();
                                 luogo = ((TextView) view.findViewById(R.id.cognome)).getText().toString();
                               
                                // Start nuovo intent
                                Intent i = new Intent(getApplicationContext(),
                                                OperatoreActivity.class);
                                // invio di id_record all'attività successiva
                                i.putExtra(TAG_AZIENDA, azienda);
                                i.putExtra(TAG_ID_TENUTA, id_tenuta);
                                i.putExtra(TAG_PRODOTTO,prodotto);
                                                       
                                // iniziare nuove attività e in attesa di qualche risposta indietro
                                startActivity(i);
                       
                               
                        }
                });

        }
       
       

        /**
         * Background Async attività per caricare tutti i prodotti facendo richiesta a HTTP
         * */

        class LoadAllOperators extends AsyncTask<String, String, String> {

                /**
                 * prima di iniziare mostra il dialogo
                 * */

                @Override
                protected void onPreExecute() {
                        super.onPreExecute();
                        pDialog = new ProgressDialog(TenutaActivity.this);
                        pDialog.setMessage("Caricamento lista tenute di "+azienda+". Attendi...");
                        pDialog.setIndeterminate(false);
                        pDialog.setCancelable(false);
                        pDialog.show();
                }

                /**
                 * ottenendo Tutti i record da url
                 * */

                protected String doInBackground(String... args) {
                        // Parametri di costruzione
                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("azienda", azienda));
                       
                        // ottenendo stringa JSON da URL
                        JSONObject json = jParser.makeHttpRequest("http://pippopippo/tenuta.php", "GET", params);
                       
                        // Controlla il tuo log cat per JSON risposta
                        Log.d("All Operators: ", json.toString());

                        try {
                                // Verifica SUCCESS TAG
                                int success = json.getInt(TAG_SUCCESS);

                                if (success == 1) {
                                        // record trovati
                                        // Da un array di records
                                        operators = json.getJSONArray (TAG_CLASS);

                                        // scorrendo tutii i record
                                        for (int i = 0; i < operators.length(); i++) {
                                                JSONObject c = operators.getJSONObject(i);

                                                // Memorizzazione di ogni elemento JSON nella variabile
                                                String id_tenuta = c.getString(TAG_ID_TENUTA);
                                                String nome = c.getString(TAG_NOME);
                                                String luogo = c.getString(TAG_LUOGO);
                                       
                                                // crea una nuova HashMap
                                                HashMap<String, String> map = new HashMap<String, String>();

                                                // aggiunge ad ogni chiave un valore
                                                map.put(TAG_ID_TENUTA, id_tenuta);
                                                map.put(TAG_NOME, nome);
                                                map.put(TAG_LUOGO, luogo);
                                               
                                                // aggiungendo HashList di ArrayList
                                                classList.add(map);
                                        }
                                } else {
                                       
                                }
                        } catch (JSONException e) {
                                e.printStackTrace();
                        }

                        return null;
                }

                /**
                 *Dopo aver completato attività in background Chiudere la finestra di avanzamento
                 * **/

                protected void onPostExecute(String file_url) {
                        // chiudere la finestra dopo aver ottenuto tutti i record
                        pDialog.dismiss();
                        // l'aggiornamento dell'interfaccia utente da sfondo Discussione
                        runOnUiThread(new Runnable() {
                                public void run() {
                                        /**
                                         * Aggiornamento dei dati analizzati JSON in ListView
                                         * */

                                        ListAdapter adapter = new SimpleAdapter(
                                                        TenutaActivity.this, classList,
                                                        R.layout.list_item_op, new String[] { TAG_ID_TENUTA,TAG_NOME,TAG_LUOGO},
                                                        new int[] { R.id.id_op, R.id.nome, R.id.cognome});
                                        // aggiornamento listview
                                        setListAdapter(adapter);
                                }
                        });
                }
        }
}

codice.php  per la prima query
Codice (Java): [Seleziona]
<?php
/*
*Codice riportato di seguito vengono elencati tutti i record
*/

// array for JSON response
$response = array();
// includi la classe di connessione
require_once __DIR__ . '/db_connect.php';
// connetti al db
$db = new DB_CONNECT();
// ottieni tutti i record da class
$result = mysql_query("SELECT *FROM azienda") or die(mysql_error());
// check for empty result
if (mysql_num_rows($result) > 0) {
 // looping through all results
 // products node
 $response["class"] = array();
 while ($row = mysql_fetch_array($result)) {
 // temp user array
 $clas = array();
 $clas["id_azienda"] = $row["id_azienda"];
 $clas["azienda"] = $row["azienda"];
 // spostare singolo record nella matrice risposta finale
 array_push($response["class"], $clas);
 }
 // success
 $response["success"] = 1;
 // echoing JSON response
 echo json_encode($response);
} else {
 // no products found
 $response["success"] = 0;
 $response["message"] = "non ci sono aziende";
 // echo no users JSON
 echo json_encode($response);
}
?>

il codice che mi da errore:
Codice (Java): [Seleziona]
<?php
/*
*Codice riportato di seguito vengono elencati tutti i record
*/

// array for JSON response
$response = array();
// includi la classe di connessione
require_once __DIR__ . '/db_connect.php';
// connetti al db
$db = new DB_CONNECT();
// ottieni tutti i record da class

$result = mysql_query("SELECT *FROM campo WHERE azienda =".$_REQUEST['azienda']);
// check for empty result
if (mysql_num_rows($result) > 0) {
 // looping through all results
 // products node
 $response["class"] = array();
 while ($row = mysql_fetch_array($result)) {
 // temp user array
 $clas = array();
 $clas["id_campo"] = $row["id_campo"];
 $clas["nome"] = $row["nome"];
 $clas["luogo"] = $row["luogo"];
 // spostare singolo record nella matrice risposta finale
 array_push($response["class"], $clas);
 }
 // success
 $response["success"] = 1;
 // echoing JSON response
 echo json_encode($response);
} else {
 // no products found
 $response["success"] = 0;
 $response["message"] = "non ci sono campi";
 // echo no users JSON
 echo json_encode($response);
}
?>

cioè...mi dice che non ci sono campi.
Aiutatemiiiii :'(

Offline agenio

  • Utente junior
  • **
  • Post: 77
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Sistema operativo:
    Windows 8.1
Re:leggere dati json inviati da device al server
« Risposta #1 il: 24 Gennaio 2015, 19:12:58 CET »
Ciao,
come prima cosa ti direi di stamparti lato php cosa c'è effettivamente nella variabile $_REQUEST['azienda'].

Poi curiosità mia, la tabella si chiama "campo"?

ciao

Offline stefy89

  • Nuovo arrivato
  • *
  • Post: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    windows 7
Re:leggere dati json inviati da device al server
« Risposta #2 il: 24 Gennaio 2015, 19:38:13 CET »
Si :-( non ho avuto molta fantasia vero?!!?
Cmq leggendo tra i vari forum ho trovato una funzione
GetParameter(" "," "); legge dagli array di GET e POST il valore dei parametri passati, e solo che andandola ad usare mi restituisce
 Call to undefined function getParameter()

Offline agenio

  • Utente junior
  • **
  • Post: 77
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Sistema operativo:
    Windows 8.1
Re:leggere dati json inviati da device al server
« Risposta #3 il: 24 Gennaio 2015, 19:52:23 CET »
Questo perchè GetParameter non è una funzione "standard" del php (magari era riferito a qualche framework che espone tale API).

Comunque vedendo il codice Java della richiesta http si vede che fai una GET al server, quindi potresti usare:
$_GET['azienda'] invece di $_REQUEST.

Non vorrei dire una cavolata (sono a digiuno di php da un bel po' :)) ma la variabile super globale $_REQUEST credo dipenda dalla configurazione presente in php.ini, a volte potrebbe non essere disponibile.

Ciao

Offline stefy89

  • Nuovo arrivato
  • *
  • Post: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    windows 7
Re:leggere dati json inviati da device al server
« Risposta #4 il: 24 Gennaio 2015, 20:07:06 CET »
Ho provato a mostrare a video entrambe le soluzioni sia $_REQUEST['azienda'] che $_GET['azienda'] ma niente.
Eppure sul lato device carica tutte le aziende

Offline agenio

  • Utente junior
  • **
  • Post: 77
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Sistema operativo:
    Windows 8.1
Re:leggere dati json inviati da device al server
« Risposta #5 il: 24 Gennaio 2015, 20:15:51 CET »
Ricapitoliamo :)

Hai due tabelle:
 - Azienda
 - Campo

La tabella campo è in relazione N a 1 con la tabella Azienda, non è che la query dovrebbe essere:
SELECT *FROM campo WHERE azienda =".$_REQUEST['id_azienda']

invece di

SELECT *FROM campo WHERE azienda =".$_REQUEST['azienda']

Offline stefy89

  • Nuovo arrivato
  • *
  • Post: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    windows 7
Re:leggere dati json inviati da device al server
« Risposta #6 il: 24 Gennaio 2015, 20:33:11 CET »
la tabella azienda ha solo due colonne e la tabella campo ne ha sette. Entrambe sono accomunate dalla colonna azienda.
E' un pò incasinato con i nomi...e te ne chiedo scusa...ma ormai è andata così...sono nomi concepiti in fase di progettazione android O:-).

Post unito: 24 Gennaio 2015, 20:50:40 CET
Inoltre ho trovato questo articolo....molto simile al miohttp://informaticoonline.it/230-come-interrogare-un-database-mysql-con-android-usando-php-e-json/ che è
« Ultima modifica: 24 Gennaio 2015, 20:50:40 CET da stefy89, Reason: Merged DoublePost »