[Tutorial] Condividere scores online
Per uppare scores online e fare una classica, ci serve un programma che farà da client, java su android, e una parte lato server in PHP, l'app invierà gli scores, e lato server, lo script in PHP scriverà gli scores nel file che chiameremo Records.txt. In questo file, ci saranno tutti gli scores, e poi verrano ordinati dal più grande al più piccolo.
Nella main activity inseriamo due EditText, uno per il name, uno per lo score, e il metodo PostDataOnPHP:
codice:
eText = (EditText)findViewById(R.id.editText);
eRecord = (EditText)findViewById(R.id.editText1);
private void PostDataOnPHP(String url, String code, String data) {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair(code, data));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
Il metodo PostDataOnPHP(), prende tre argomenti, url, code, e data, url è ovviamente dove sta il nostro file.php sul server, per esempio "www.ilmiosito.it/file.php", code è la stringa che passeremo allo script php per fargli capire che è l'app giusta, e non un programma qualunque a mandargli dati. In fine, data, anche questa una stringa, che ovviamente conterrà lo score da uppare.
Inseriamo quindi un bottone nella nostra main activiy:
codice:
Button buttonSend = (Button)findViewById(R.id.send);
buttonSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PostDataOnPHP("http://www.ilmiosito.it/file.php", "code001", eRecord.getText()+": "+eText.getText());
}
});
qui semplicemente, quando premiamo il bottone invierà il nostro score.
“code001” vedremo la sua utilità nel file.php fra poco, eRecord.getText(), è la variabile che conterrà il nostro score che abbiamo scritto nel campo eRecord, e name è la stringa con il nostro nome che abbiamo scritto nel campo eText.
Adesso parliamo del lato server:
codice:
<?php
if (isset($_POST['code001']) && $_POST['code001'] != '')
{
$your_string = $_POST['code001'];
$file = 'Records.html';
$current = file_get_contents($file);
$current .= $your_string . ';*~';
file_put_contents($file, $current);
$array = explode("*~", $current);
sort($array, SORT_NUMERIC);
$arrayReversed = array_reverse($array);
$file2 = 'Records.txt';
file_put_contents($file2, $arrayReversed);
}
else
{
echo "post code sbagliato";
}
?>
Qui lo script in php, quando arrivano i dati, controlla che il codice sia “code001”, quello che abbiamo visto in precedenza, e quindi dopo esegue i calcoli, altrimenti, restituisce un echo "post code sbagliato".
Guardiamo che calcoli fa lo script, in caso la stringa passata sia code001:
La prima riga, prende la stringa che abbiamo inviato da android, $_POST[’code001’], e la assegna a $your_string, apre il file Records.html, inserisce tutti i dati dentro la variabile $current, aggiunge poi a current la nostra stringa $your_string, e poi aggiunge dei valori di chiusura riga, “;*~”, e infine, scrive current dentro il file Records.html, aggiornandolo.
A questo punto lo script, non fa altro che creare un nuovo array, suddivide $current ai caratteri “*~”, poi ordina tutti i numeri in sort_numeric, alla riga “sort($array, SORT_NUMERIC);”, e subito dopo ribalta l’array, ( $arrayReversed = array_reverse($array); )questo perchè abbiamo bisogno che i numeri più grandi siano in cima all’array, e non in fondo, gli score più alti vanno prima in classifica ovviamente.
Una volta fatto il tutto, scrive $arrayReversed nel file Records.txt, che adesso andremo a leggere e parserizzare su android.
Creeremo una nuova ListActivity, leggeremo il file Records.txt, e inseriremo i dati dentro una lista:
codice:
public class A_Scores extends ListActivity
{
private String myURL = "http://www.ilmiosito.it/Records.txt";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try {
// Create a URL for the desired page
URL url = new URL(myURL);
// Read all the text returned by the server
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
String str = br.readLine();
br.close();
if(str != "")
{
String[] array = str.split(";");
for(int n = 0; n < array.length; n++)
{
String temp = array[n];
array[n] = (n+1)+") "+temp;
}
setListAdapter(new ArrayAdapter<String>(this, R.layout.listff, array));
}
}
catch (MalformedURLException e)
{
}
catch (IOException e)
{
}
}
}
Fonte: http://www.startingpixel.com