Partage
  • Partager sur Facebook
  • Partager sur Twitter

aide android studio explication

Sujet résolu
    11 avril 2018 à 22:05:01

    Bonjours je débute actuellement sur androide studio et je cherche a faire de la communication base de donnés MYSQL avec android studio.

    J'ai récemment trouvé un exemple sur internet mais je ne comprend pas une partie l'auteur n'étant plus actif je me demandais si l'un de vous pourriez me l'expliqué.

    ' l'exemple: http://kosalgeek.com/android-php-mysql-login-registration-cache-sharedpreferences/

    voici le code de connexion:

    package com.example.dell.androidtodolistonline1;
    
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.kosalgeek.android.md5simply.MD5;
    import com.kosalgeek.genasync12.AsyncResponse;
    import com.kosalgeek.genasync12.ExceptionHandler;
    import com.kosalgeek.genasync12.PostResponseAsyncTask;
    
    import java.util.HashMap;
    
    public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
        final String TAG = "LoginActivity";
        EditText etEmail, etPassword;
        Button btnLogin;
        TextView tvRegister;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            etEmail = (EditText)findViewById(R.id.etEmail);
            etPassword = (EditText)findViewById(R.id.etPassword);
            btnLogin = (Button)findViewById(R.id.btnLogin);
            btnLogin.setOnClickListener(this);
    
            tvRegister = (TextView)findViewById(R.id.tvRegister);
            tvRegister.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent in = new Intent(getApplicationContext(), RegisterActivity.class);
                    startActivity(in);
                }
            });
        }
    
        private boolean emptyValidate(EditText etEmail, EditText etPassword){
            String email = etEmail.getText().toString();
            String password = etPassword.getText().toString();
            return (email.isEmpty() && password.isEmpty());
        }
        String password = "";
        @Override
        public void onClick(View v) {
    
            final String email = etEmail.getText().toString();
            password =  MD5.encrypt(etPassword.getText().toString());
    
            HashMap<String, String> loginData = new HashMap<>();
            loginData.put("email", email);
            loginData.put("password", password);
    
            PostResponseAsyncTask loginTask = new PostResponseAsyncTask(this, 
                loginData, new AsyncResponse() {
                @Override
                public void processFinish(String s) {
                    Log.d(TAG, s);
                    if(s.contains("LoginSuccess")){
                        SharedPreferences pref = getSharedPreferences("loginData", MODE_PRIVATE);
                        SharedPreferences.Editor editor = pref.edit();
                        editor.putString("email", email);
                        editor.putString("password", password);
                        editor.commit();
                        Intent in = new Intent(getApplicationContext(), MainPageActivity.class);
                        startActivity(in);
                    }
                    else{
                        Toast.makeText(getApplicationContext(), 
                            "Something went wrong. Cannot login.", Toast.LENGTH_LONG).show();
                    }
                }
            });
            loginTask.setExceptionHandler(new ExceptionHandler() {
                @Override
                public void handleException(Exception e) {
                    if(e != null && e.getMessage() != null){
                        Log.d(TAG, e.getMessage());
                    }
                }
            });
            loginTask.execute("http://10.0.3.2:8089/todolistonline/login.php");
        }
    }


    En fait je ne comprend pas comment sont envoyé  les donnés et annalysé si quelqu'un pourrait m'éclairé merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      13 avril 2018 à 17:07:18

      Si je vais t'expliquer la chose. Quand on veut faire communiquer une base données MySQL avec une application on est obligé d'uiliser un code coté serveur (PHP par exemple) pour pourvoir d'interfacer avec notre BDD. En effet il n'y a pas de moyen de faire autrement en Android

      Enfaite dans ton cas ce qui se passe est simple : 

      - Android récupère les valeurs email et password (crypte le password au passage)

      - Android créer ensuite une requete HTTP vers l'URL de la ligne 90 http://10.0.3.2/...... il envoie en paramètre POST me password crypté et l'email

      - Ensuite la page login.php va vérifié si le mot de passe entré correspond bien a un compte existant en gros le code coter server en PHP doit ressembler à ça

      require ''.$_SERVER['DOCUMENT_ROOT'].'/allComponent/init_bdd.php';
      $DB_name = "PersoBDD";
      try { //connection a la bdd
      	$bdd = new PDO('mysql:host='.$DB_host.';dbname='.$DB_name.';', ''.$DB_user.'', ''.$DB_pass.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
      }
      catch(PDOException $e) {
      	echo 'Erreur : ' . $e->getMessage();
      }
       
      $email = htmlspecialchars(strip_tags(trim($_POST['email'])));
      $password = htmlspecialchars(strip_tags(trim($_POST['password'])));
      $req_connect = $bdd->prepare('SELECT password FROM AccountService WHERE email=:email');
      $req_connect->execute(array(
      	"email" => $email
      )); //execution de la requete pour récupérer un password correspondant à l'email
      
      if ($req_connect->rowCount() == 0) //si on a pas de password le compte n'existe pas
      	echo 'false';
      else {
      	$data = $req_connect->fetch();
      
      	if (!password_verify($password,$data[0])) // on compare le password récupérer et le password en paramètre
      		echo 'false';
      	else {
      		echo "LoginSuccess";
      	}
      }
      

      - Si les mots de passe correspond il répond "LoginSuccess" sinon autre chose d'où le 

      if(s.contains("LoginSuccess"))

      car s est la valeur de réponse de la page

      et là : 

      SharedPreferences pref = getSharedPreferences("loginData", MODE_PRIVATE);
                          SharedPreferences.Editor editor = pref.edit();
                          editor.putString("email", email);
                          editor.putString("password", password);
                          editor.commit();

      il enregistre dans le cache de l'application les deux données (pour que l'utilisateur n'ai pas a ce reconnecter tout le temps)

      • Partager sur Facebook
      • Partager sur Twitter
        14 avril 2018 à 1:32:41

        Merci beaucoup c'était très claire comme explication ! :)
        • Partager sur Facebook
        • Partager sur Twitter

        aide android studio explication

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown