Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

[Guida] Condividere scores online

Discussione in 'Development' iniziata da Hhaunted, 10 Ago 2013.

  1. Hhaunted

    Hhaunted Baby Droid

    Iscritto:
    24 Ott 2012
    Messaggi:
    15
    "Mi Piace":
    6
    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() {
    
    		  [USER=106217]Override[/USER]
    			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";
    
      [USER=106217]Override[/USER]
    	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: <a href=http://www.startingpixel.com>startingpixel.com</a>
     
    Ultima modifica: 10 Ago 2013