Salve a tutti ,ho il seguente problema : cercando nei vari forum su internet ho trovato un modo per interrogare da un client (smartphone android) un database mysql situato sul mio pc di casa tramite apposito e semplice server scritto in php. Peccato che non funzioni.
Vi posto il codice e vi spiego il problema:
Il database è semplice
E' un database MySql (io lo ho chiamato “hellohttp”) che contiene una tabella chiamata “Persone”, dentro la quale abbiamo i campi “id”, “nome”, “cognome”.
Qui di seguito c’è il codice della pagina “richiestaInfo.php” che risiede sul server e verrà invocata dall’applicazione android per prelevare dei dati dal database:
Premetto che io sto usando wamp per lanciare il server da casacodice:<?php mysql_connect("localhost:3306","root",""); mysql_select_db("hellohttp"); $q=mysql_query("SELECT * FROM persone WHERE id=".$_REQUEST['idnomerichiesto']); while($e=mysql_fetch_assoc($q)) $output[]=$e; print(json_encode($output)); mysql_close(); ?>
Non ho fatto altro che creare il database con mysql ,poi ho creato con il blocco notes il file in php e l'ho copiato nella cartella www di wamp e ho avviato il tutto in mkodo che fosse attivo quando qualche client si connettesse.
Ora vediamo il codice dell’applicazione Android che fa da client e che vuole interrogare il server remoto ed ottenere i dati di un particolare “id”:
Qui di seguito c’è il semplice codice dell’interfaccia grafica dell’applicazione Android:codice:public class HelloHttpPostActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView textviewDatiRicevuti = (TextView) findViewById(R.id.datiRicevuti); Button buttonInviaDati = (Button) findViewById(R.id.buttonInviaDati); buttonInviaDati.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { //invio richiesta textviewDatiRicevuti.setText(inviaDati()); } }); } public String inviaDati(){ String result = ""; String stringaFinale = ""; ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("idnomerichiesto","1")); InputStream is = null; //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://10.0.2.2:8080/helloHttp/richiestaInfo.php"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("TEST", "Errore nella connessione http "+e.toString()); } if(is != null){ //converto la risposta in stringa 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(); result=sb.toString(); }catch(Exception e){ Log.e("TEST", "Errore nel convertire il risultato "+e.toString()); } //parsing dei dati arrivati in formato json try{ JSONArray jArray = new JSONArray(result); for(int i=0;i<jArray.length();i++){ JSONObject json_data = jArray.getJSONObject(i); Log.i("TEST","id: "+json_data.getInt("id")+ ", cognome: "+json_data.getString("cognome")+ ", nascita: "+json_data.getInt("anno") ); stringaFinale = json_data.getInt("id") + " " + json_data.getString("cognome") + " " + json_data.getInt("anno") + "\n\n"; } } catch(JSONException e){ Log.e("log_tag", "Error parsing data "+e.toString()); } } else{//is è null e non ho avuto risposta } return stringaFinale; } }
Inoltre ho aggiunto nel file manifest i seguenti permessicodice:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/buttonInviaDati" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Invia dati" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Dati ricevuti:" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/datiRicevuti" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Per ora nessun dato ricevuto" /> </LinearLayout>
Il problema che sussiste è che mi da errore nella connessionecodice:<uses-permission android:name="android.permission.INTERNET" />
Ho cercato su internet e il problema risiede nel fatto che dovrei separare la richiesta http dal resto del codice usando gli asynctask ma non ci riesco ad applicarli qui
se potreste darmi una mano magari provando il codice sul vostro pc ,perchè altrimenti non saprei come andare avanti

LinkBack URL
About LinkBacks
Rispondi quotando
Ultima modifica di giulio110; 29-09-13 alle 