Un semplice esempio, che mostra come avviene la comunicazione client-server in Android inviando al server username e password (sotto forma di parametri post) inseriti per effettuare il login. La prima cosa da fare, prima di entrare nel vivo del codice java che ci interessa particolarmente, è aprire il file “manifest.xml” ed aggiungere questa riga per avere i permessi per l’utilizzo di internet:
<uses-permission android:name="android.permission.INTERNET" />
L’ applicazione che andremo a realizzare sara’ molto semplice, avremo un layout con due campi di testo e un bottone per inviare i dati:
Il Layout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/editText1" android:layout_alignLeft="@+id/editText1" android:layout_marginBottom="40dp" android:text="Username" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="46dp" android:layout_marginTop="65dp" android:ems="10" > <requestFocus /> </EditText> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText2" android:layout_below="@+id/editText1" android:layout_marginTop="24dp" android:text="Password" /> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/textView2" android:ems="10" android:inputType="textPassword" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText2" android:layout_below="@+id/editText2" android:layout_marginTop="34dp" android:text="Button" /> </RelativeLayout>
Adesso diamo uno sguardo alla parte java che interessa l’applicazione; invieremo i dati inseriti al server al click sul bottone, e a seconda della risposta ottenuta, mettiamo in visualizzazione un messaggio di notifica se il login è effettuato o meno.
Il file MainActivty.java sara’ il seguente:
MainActivity.java
package com.example.demo; import android.os.Bundle; import android.app.Activity; import android.widget.EditText; import android.widget.Button; import android.view.View; import android.widget.Toast; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.client.methods.HttpPost; import java.util.List; import java.util.ArrayList; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.apache.http.HttpResponse; import java.io.InputStream; import java.io.InputStreamReader; import java.io.BufferedReader; public class MainActivity extends Activity { EditText user, pass; Button send; String username; String password; HttpResponse response; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); user= (EditText) findViewById(R.id.editText1); pass= (EditText) findViewById(R.id.editText2); send=(Button) findViewById(R.id.button1); send.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { try{ getText(); } catch(Exception ex) { Toast.makeText(MainActivity.this,ex.getMessage(),Toast.LENGTH_LONG).show(); } } }); } public void getText() { username=user.getText().toString(); password=pass.getText().toString(); try { HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.yoursite.it/script.php"); List<NameValuePair> pairs = new ArrayList<NameValuePair>(2); pairs.add(new BasicNameValuePair("username", username)); pairs.add(new BasicNameValuePair("password", password)); post.setEntity(new UrlEncodedFormEntity(pairs)); response = client.execute(post); // if(response != null) { String res=response.toString(); res= res.replaceAll("\\s+",""); if(!res.equals("failed")) { Toast.makeText(this, "Username o password errati!", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "Login effettuato", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(this, "Impossibile completare la richiesta", Toast.LENGTH_LONG).show(); } } catch(Exception e) { // Toast.makeText(MainActivity.this,e.getMessage(),Toast.LENGTH_LONG).show(); } } }
Infine abbiamo il nostro file sul server che che ci controlla se i parametri sono corretti o meno. Lo script è molto basilare a puro scopo dimostrativo, è chiaro che in termini di sicurezza vanno aggiunte altre funzionalità:
<?php $conn = mysqli_connect("host","user","password","dbname"); $username=$_POST['username']; $password=$_POST['password']; $query="SELECT username,password FROM users WHERE username='".$username."' AND password='".$password."'"; $result=mysqli_query($conn,$query); if(mysqli_num_rows($result)>0) { echo "login effettuato"; } else { echo "failed"; } ?>