Autore Topic: Login form per connettere la mia app android ad un sito php con db MySql  (Letto 4391 volte)

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Salve a tutti, sono nuovo anzi nuovissimo  :D nella programmazione android ma grazie ai vostri tutorial sto realizzando molte cose  :-). Come da titolo ho bisogno di creare un'app che mi permetta di entrare e visualizzare contenuti in un sito scritto in php e MySql, premetto che il sito è fatto con Drupal. Il problema è che non so proprio da dove iniziare :-(. Spero tanto che possiate aiutarmi, Grazie.

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #1 il: 04 Settembre 2012, 13:33:07 CEST »
0
alla fine sono riuscito a farlo da solo  ;-) grazie a tutti cmq. Se per caso a qualcuno potesse servire posto il codice
 
Codice (Java): [Seleziona]
import java.io.BufferedReader;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class LogIn extends Activity{
       
        TextView txt;
    EditText uname,pwd;
    InputStream is = null;
    StringBuilder sb=null;
   
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
       
        Button b = (Button)findViewById(R.id.log);
        uname = (EditText)findViewById(R.id.uname);
        pwd = (EditText)findViewById(R.id.pwd);

        b.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

                    nameValuePairs.add(new BasicNameValuePair("myusername", uname.getText().toString()));
                    nameValuePairs.add(new BasicNameValuePair("mypassword", pwd.getText().toString()));

                    try
                    {
                     HttpClient httpclient = new DefaultHttpClient();
                     HttpPost httppost = new HttpPost("http://link_pagina_php_che_si_collega_al_database");
                     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                     HttpResponse response = httpclient.execute(httppost);
                     HttpEntity entity = response.getEntity();
                     is = entity.getContent();
                    }
                    catch(Exception e)
                    {
                            Log.e("log_tag","Error in http connection"+e.toString());
                    }  
                    try{
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                         sb = new StringBuilder();
                         sb.append(reader.readLine() + "\n");

                         String line="0";
                         while ((line = reader.readLine()) != null) {
                                        sb.append(line + "\n");
                          }
                          is.close();
                         Toast mioToast = Toast.makeText(LogIn.this, sb.toString(), Toast.LENGTH_LONG);
                             mioToast.setGravity(Gravity.CENTER, 0, 0);
                             mioToast.show();
                          }catch(Exception e){
                                Log.e("log_tag", "Error converting result "+e.toString());
                          }
            }
        });
       
    }
}

se ci fossero correzione da fare o una stesura del codice migliore sarei lieto di avere i vostri consigli  :-) :-) grazie

Offline sacara

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #2 il: 04 Dicembre 2012, 17:36:01 CET »
0
Ma esattamente cosa restituisce la pagina php una volta fatto il login?
fai un echo (o return) di cosa?
Semplice testo???

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #3 il: 04 Dicembre 2012, 17:41:27 CET »
+1
Fossi in te la httprequest la farei in una AsyncTask

Se adesso la provi in cellulari con versione dal 4.0 in su crasha, fidati  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline Dav_android

  • Utente junior
  • **
  • Post: 78
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Tab2 10.1
  • Sistema operativo:
    Windows 8
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #4 il: 15 Dicembre 2012, 13:43:51 CET »
0
per leggere l'estrazione di dati dal db devi convertirli in json o xml? oppure riesci a passare le variabili ad android con un semplice echo?

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #5 il: 27 Dicembre 2012, 13:28:24 CET »
0
Allora si la pagina php restituisce solo una stringa eccola:
Codice (PHP): [Seleziona]
<?php

$host = 'host';
$username = 'user';
$password = 'pass';
$db_name = 'database';
$tbl_name="table";

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or
die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT uid FROM $tbl_name WHERE name='$myusername' and pass=MD5('$mypassword')";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
echo "Autentico";
}
else {
echo "Username o Password Errati!";
}
?>

Questo è invece il codice Java quasi finito:
Codice (Java): [Seleziona]
public class LogIn extends Activity{
       
        public final String tag = "LogIn";
    public static ProgressDialog dialog;
       
        TextView txt;
    EditText uname,pwd;
    InputStream is = null;
    StringBuilder sb=null;
   
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
   
       
        Button b = (Button)findViewById(R.id.log);
        uname = (EditText)findViewById(R.id.uname);
        pwd = (EditText)findViewById(R.id.pwd);
       
        uname.setImeOptions(EditorInfo.IME_ACTION_DONE);
        pwd.setImeOptions(EditorInfo.IME_ACTION_DONE);

        b.setOnClickListener(new View.OnClickListener() {

               
               
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
               
               
               
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("myusername", uname.getText().toString()));
                    nameValuePairs.add(new BasicNameValuePair("mypassword", pwd.getText().toString()));

                    try
                    {
                     HttpClient httpclient = new DefaultHttpClient();
                     HttpPost httppost = new HttpPost("Pagina_php_del_login");
                     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                     HttpResponse response = httpclient.execute(httppost);
                     HttpEntity entity = response.getEntity();
                     is = entity.getContent();
                    }
                    catch(Exception e)
                    {
                            Log.e("log_tag","Error in http connection"+e.toString());
                                 Toast mioToast = Toast.makeText(LogIn.this, R.string.err_rete , Toast.LENGTH_LONG);
                             mioToast.setGravity(Gravity.BOTTOM, 0, 60);
                             mioToast.show();
                           
                    }  
                    try{
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                         sb = new StringBuilder();
                         sb.append(reader.readLine() + "\n");

                         String line="0";
                         while ((line = reader.readLine()) != null) {
                                        sb.append(line + "\n");
                          }
                          is.close();
                         
                          String auth = sb.toString();
                         
                          if (auth.equals("Autentico" + "\n")) {
                             
                                 Toast mioToast = Toast.makeText(LogIn.this, String.format(getResources().getString(R.string.auth_name), uname.getText().toString()) , Toast.LENGTH_LONG);
                             mioToast.setGravity(Gravity.BOTTOM, 0, 60);
                             mioToast.show();
                               
                             
                        /*dati utente da passare alla seconda activity (quella riservata a chi effettua il login)*/
                        String username = uname.getText().toString();
       
                                final Intent i = new Intent(LogIn.this, AreaSoci.class);
                               
                                String pkg=getPackageName();
                               
                                i.putExtra(pkg+".uname", username);
                               
                        startActivity(i);      
                       
                        uname.setText("");
                        pwd.setText("");
                       
                       
                           }else{
                         Toast mioToast = Toast.makeText(LogIn.this, sb.toString(), Toast.LENGTH_LONG);
                             mioToast.setGravity(Gravity.BOTTOM, 0, 60);
                             mioToast.show();
                             
                       
                           }
                     
                         
                          }catch(Exception e){
                                Log.e("log_tag", "Error converting result "+e.toString());
                               
                             
                          }
            }
        });            
    }


Per TheBaffo io ho un cellulare con android 4.0.4 e non crasha....cmq farò come dici di certo funzionerà meglio  :D
« Ultima modifica: 27 Dicembre 2012, 14:57:02 CET da login »

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #6 il: 27 Dicembre 2012, 16:17:53 CET »
0
Ma da manifest che versione hai messo come min e target? dovrebbe influire anche quello sull'eccezione NetworkOnMainThreadException  :-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #7 il: 27 Dicembre 2012, 17:30:45 CET »
0
Nel Manifast ho messo questo :
Codice (XML): [Seleziona]
    <uses-sdk
       android:minSdkVersion="4"
       android:targetSdkVersion="4" />

Ma cmq adesso ho modificato il codice mettendo httprequest in un AsyncTask  ;-)
« Ultima modifica: 27 Dicembre 2012, 17:32:25 CET da login »

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #8 il: 27 Dicembre 2012, 17:46:34 CET »
0
Bravo! Comunque, nel manifest metti cosi

Codice (XML): [Seleziona]
<uses-sdk
      android:minSdkVersion="4"
      android:targetSdkVersion="17" />

è bene che la versione targetizzata dal progetto sia sempre l'ultima  ;-)

probabilmente se provavi con il manifest modificato a fare senza asynctask dava errore!  :-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #9 il: 27 Dicembre 2012, 18:15:24 CET »
0
Grazie per il consiglio  :D

edit:
vedendo che sull'emulatore funzionava bene l'ho voluta provare sul tel ma quando faccio il login non funziona...cioè io dopo avere fatto il login faccio aprire un'altra activity ma se metto come target 17 non la apre mentre se metto 4 si  ???

questo è il codice forse metto qualcosa di vecchio e non funziona... :-(:
Codice (Java): [Seleziona]
public class LogIn extends Activity{
       
        public final String tag = "LogIn";
    public static ProgressDialog dialog;
       
        TextView txt;
    EditText uname,pwd;
    InputStream is = null;
    StringBuilder sb=null;
   
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
   
       
        Button b = (Button)findViewById(R.id.log);
        uname = (EditText)findViewById(R.id.uname);
        pwd = (EditText)findViewById(R.id.pwd);
       
        uname.setImeOptions(EditorInfo.IME_ACTION_DONE);
        pwd.setImeOptions(EditorInfo.IME_ACTION_DONE);

        b.setOnClickListener(new View.OnClickListener() {

               
               
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
               
                dialog = ProgressDialog.show(LogIn.this, "", "Accesso in Corso...", true);
                new LogInTask().execute();
            }//OnClick
       
        }); //OnClickListener            
   
    }//On Create

   
    public class LogInTask extends AsyncTask<String,String,String>  {
        public String doInBackground(String... params) {
 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("myusername", uname.getText().toString()));
                    nameValuePairs.add(new BasicNameValuePair("mypassword", pwd.getText().toString()));

                    try
                    {
                     HttpClient httpclient = new DefaultHttpClient();
                     HttpPost httppost = new HttpPost("pagina_php");
                     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                     HttpResponse response = httpclient.execute(httppost);
                     HttpEntity entity = response.getEntity();
                     is = entity.getContent();
                    }
                    catch(Exception e)
                    {
                            Log.e("log_tag","Error in http connection"+e.toString());
                                 Toast mioToast = Toast.makeText(LogIn.this, R.string.err_rete , Toast.LENGTH_LONG);
                             mioToast.setGravity(Gravity.BOTTOM, 0, 60);
                             mioToast.show();
                             dialog.dismiss();
                    }  
                   
                                return tag;      
        }
         protected void onProgressUpdate(String... values) {
                             
         }

         protected void onPostExecute(String result) {
             // cosa fare dopo httprequest..
                 try{
                 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                  sb = new StringBuilder();
                  sb.append(reader.readLine() + "\n");

                  String line="0";
                  while ((line = reader.readLine()) != null) {
                                 sb.append(line + "\n");
                   }
                   is.close();
                   
                   String auth = sb.toString();
                   
                  if (auth.equals("Autentico" + "\n")) {
                     
                         Toast mioToast = Toast.makeText(LogIn.this, String.format(getResources().getString(R.string.auth_name), uname.getText().toString()) , Toast.LENGTH_LONG);
                             mioToast.setGravity(Gravity.BOTTOM, 0, 60);
                             mioToast.show();
                       
                             
                        /*dati utente da passare*/
                        String username = uname.getText().toString();
 
                        final Intent i = new Intent(LogIn.this, AreaSoci.class);
                       
                        String pkg=getPackageName();
                       
                        i.putExtra(pkg+".uname", username);
                       
                 startActivity(i);     
                 
                 uname.setText("");
                 pwd.setText("");
                 
               
                   }else{
                 Toast mioToast = Toast.makeText(LogIn.this, sb.toString(), Toast.LENGTH_LONG);
                     mioToast.setGravity(Gravity.BOTTOM, 0, 60);
                     mioToast.show();
                     dialog.dismiss();
               
                   }
             
                 
                   }catch(Exception e){
                         Log.e("log_tag", "Error converting result "+e.toString());
                         dialog.dismiss();
                     
                   }

         }  
    }//AsyncTask
}//Class LogIn
« Ultima modifica: 27 Dicembre 2012, 18:45:36 CET da login, Reason: Funziona a metà.. »

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #10 il: 27 Dicembre 2012, 18:48:14 CET »
0
è come se non eseguisse il onPostExecute()...però ripeto solo sul telefono perchè sull'emulatore va benissimo...chissà perchè   ???

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #11 il: 27 Dicembre 2012, 19:16:39 CET »
0
Vai in debug, metti dei breakpoint nel catch dentro il doInBackground, penso passi di lì ;)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline login

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Xperia Arc S
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #12 il: 27 Dicembre 2012, 19:31:53 CET »
0
Sono ancora nuovissimo in android...non ho ben capito cosa fare  :'( potresti spiegarmi meglio...

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #13 il: 28 Dicembre 2012, 09:12:25 CET »
0
Sviluppi con eclipse, giusto? Dovresti lanciare il programma invece che con il "play" classico, ma in modalita "debug"

guarda qui  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Login form per connettere la mia app android ad un sito php con db MySql
« Risposta #14 il: 28 Dicembre 2012, 09:45:55 CET »
+1
L'input stream lo devi leggere nella doinbackground! Nella post execute devi già avere il risultato!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia