Autore Topic: app android per prendere i dati da un database remoto!!  (Letto 1711 volte)

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
app android per prendere i dati da un database remoto!!
« il: 13 Febbraio 2013, 18:47:25 CET »
0
Ciao a tutti, sto creando un'applicazione per la mia scuola che consente di prendere le assenze tramite tablet per poi spedirle al server interno!! Io non ho ben chiaro questo file php e alcune righe di codice android per prendere i dati, infatti ho i seguenti dubbi:

Ho molti dubbi perche ho sempre utilizzato  EasyPhp, in cui mettevo le pagine php  all interno della cartella EasyPhp\www\ nomefile.php. Inoltre potevo visualizzarla andando sull'opzione localweb e vedere i'indirizzo localhost della pagina!

-se utilizzo xampp, dove devo mettere il file php sotto riportato??
- il database scuola lo creo attraverso phpmyadmin e inoltre dove viene salvato??
- $db_host = "<ip-address>"; intende l'indirizzo del mio pc o  localhost di phpmyadmin in cui è contenuta la pagina php??
- $db_user = "<database user>"; $db_password = "<database password>"; cosa dovrei inserire??
- è oppurtuno usare xampp per prendere i dati da un server remoto oppure esiste un metodo migliore??
- se utilizzo il wi fi del mio cellulare e possibile collegarmi al database remoto( se inserisco il'indirizzo ip della macchina interessata l'applicazione riesce a capire il percorso
telefono-> router tramite wi fi , router-> miopc tramite cavo ethernet???)

Scusate le mie domande, ma è praticamente un mese che utilizzo php e android insieme( a scuola è una cosa innovativa e i professori non ce lo spiegano) e ancora devo studiare il funzionamento di una rete( al momento conosco i livelli iso-osi, wi fi e ethernet  parzialmente, ancora devo studiare tt i protocolli). Quindi mi servirebbe un piccolo aiuto per andare avanti prima che termini la scuola!!! grazie in anticipo!!
Codice (Java): [Seleziona]
 HttpGet httpGet = new HttpGet("indirizzo pagina php"); // Dove ricavo l'indirizzo della pagina php inserita in xampp???
Codice: [Seleziona]
<?php
// parametri del database
$db_host = "<ip-address>";
$db_user = "<database user>";
$db_password = "<database password>";
$db_name = "<database name>";
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri...");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri...");
$q=mysql_query("SELECT * FROM <nome tabella>");
while($e=mysql_fetch_assoc($q))
        $output[]=$e;
print(json_encode($output));
mysql_close();
?>

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:app android per prendere i dati da un database remoto!!
« Risposta #1 il: 13 Febbraio 2013, 19:43:06 CET »
0
Allora, la chiave di tutto sta in questa tua frase:

Citazione
Ho molti dubbi perche ho sempre utilizzato  EasyPhp, in cui mettevo le pagine php  all interno della cartella EasyPhp\www\ nomefile.php. Inoltre potevo visualizzarla andando sull'opzione localweb e vedere i'indirizzo localhost della pagina!

Quando facevi quelle prove praticamente sfruttavi il fatto che il server in cui gira la pagina PHP era lo stesso in cui gira in browser. Questo è un caso semplificato, perchè in generale il browser gira su una macchina diversa dal server.

Il primo passo che devi fare è creare una pagina PHP dimostrativa ed accedervi ad esempio dal browser del telefono (o del tablet). L'indirizzo che userai in quel caso è proprio ciò che ti serve. La prova ti serve come verifica che l'indirizzo del server e della pagina PHP è corretto.

Ti faccio un esempio: Faccio girare EasyPHP sul mio PC che in rete locale ha IP 192.168.1.10 e poi mi collego alla stessa rete locale con il tablet, apro il browser e tipicamente scriverò http://192.168.1.10/miacartella/miofile.php

Il database è interno a EasyPHP, quindi risiede nel PC, la pagina PHP ti serve come tramite tra browser (o app) e database.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:app android per prendere i dati da un database remoto!!
« Risposta #2 il: 13 Febbraio 2013, 20:36:08 CET »
0
bene ho capito, pero easyphp non lo posso usare dato che uso windows 8, che mi da problemi di incompatibilita!! i miei dubbi maggiori sono su xampp che nn so proprio come usarlo!! Xampp ti da la possibilita di utilizzare phpmyadmin, che mi confonde le idee!!! Comunque in futuro mettero nella mia applicazione l'opzione per inserire l ip della macchina server!!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:app android per prendere i dati da un database remoto!!
« Risposta #3 il: 14 Febbraio 2013, 08:09:43 CET »
0
bene ho capito, pero easyphp non lo posso usare dato che uso windows 8, che mi da problemi di incompatibilita!! i miei dubbi maggiori sono su xampp che nn so proprio come usarlo!! Xampp ti da la possibilita di utilizzare phpmyadmin, che mi confonde le idee!!! Comunque in futuro mettero nella mia applicazione l'opzione per inserire l ip della macchina server!!

Qualsiasi server tu utilizzi, quanto detto sopra è sempre valido. PhpMyAdmin è solo uno strumento per lo sviluppatore, non ha nessun ruolo nel normale utilizzo. Paradossalmente è molto più semplice se ti prendi un hosting base php+mysql (costa qualche decina di euro l'anno) e lavori su quello.

Se poi il tuo problema è che non hai familiarità con i concetti base delle web app e dei database server side, allora mi sa che prima devi dedicare un po' di tempo a quello studio, prima di pensare alle app android che ne fanno uso.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:app android per prendere i dati da un database remoto!!
« Risposta #4 il: 14 Febbraio 2013, 18:15:15 CET »
0
si dovrei studiare un po di piu, ma mi sono rimasti solo 2 mesi di tempo, devo essere rapido!! Ho capito come utilizzare xampp, metto la mia pagina php all'interno della cartella /xampp/htdocs e dopo mi creo il mio database scuola con phpmyadmin!!
 questa pagina php puo fare al caso mio per prelevare i dati dal database e convertirli??? inoltre  ho trovato anche il codice android su internet!!
Non ho difficolta ad imparare velocemente mi basta un piccolo aiuto per interpretare i codici e dopo faccio da solo!
Codice: [Seleziona]
<?php
// parametri del database
$db_host = "Inserisco localhost";
$db_user = "root";
$db_password = "la tolgo";
$db_name = "scuola";
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri...");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri...");
$q=mysql_query("SELECT * FROM <nome tabella>");
while($e=mysql_fetch_assoc($q))
        $output[]=$e;
print(json_encode($output));
mysql_close();
?>
Codice (Java): [Seleziona]
package<package-name>;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Vector;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class LiukPresencesActivity extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      ListView listView = (ListView) findViewById(R.id.mylist);
      Vector v = new Vector();
     
      String readTwitterFeed = readTwitterFeed();
      try {
         JSONArray jsonArray = new JSONArray(readTwitterFeed);
         
         for (int i = 0; i < jsonArray.length(); i++)
         {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            v.add(jsonArray.getJSONObject(i).getString("Nome") +" "+ jsonArray.getJSONObject(i).getString("Cognome"));
         }
      } catch (Exception e) {
         Toast.makeText(this, "Exception" + e,Toast.LENGTH_LONG).show();
         e.printStackTrace();
      }
      ListAdapter listaContatti = new ArrayAdapter(this, android.R.layout.simple_list_item_1, v);
      listView.setAdapter(listaContatti);
     
      //Toast.makeText(this, "END OF APPLICATION",Toast.LENGTH_LONG).show();
   } //end onCreate

   public String readTwitterFeed() {
      StringBuilder builder = new StringBuilder();
      HttpClient client = new DefaultHttpClient();
      HttpGet httpGet = new HttpGet("<link del tuo file php>");
     
      try {
         HttpResponse response = client.execute(httpGet);
         StatusLine statusLine = response.getStatusLine();
         int statusCode = statusLine.getStatusCode();
         if (statusCode == 200) {
           
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null)
            {
               builder.append(line);
            } //end while
         } else {
            Toast.makeText(this, "Failed to download file",Toast.LENGTH_LONG).show();
         }
      } catch (ClientProtocolException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
      return builder.toString();
   }
}