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:
codice:
<?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();
?>
Premetto che io sto usando wamp per lanciare il server da casa
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”:
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;
}
}
Qui di seguito c’è il semplice codice dell’interfaccia grafica dell’applicazione Android:
codice:
<?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>
Inoltre ho aggiunto nel file manifest i seguenti permessi
codice:
<uses-permission android:name="android.permission.INTERNET" />
Il problema che sussiste è che mi da errore nella connessione
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