2013-02-01 4 views
2

J'essayais d'ajouter un identifiant dans mon bouton d'édition. Ce que je veux faire est que, quand un utilisateur a sélectionné un élément à éditer, puis appuie sur le bouton d'édition une pop-up montrera demandant le nom d'utilisateur et le mot de passe de la personne. J'ai essayé de créer une boîte de dialogue de connexion, mais je continue d'échouer.Comment configurer une boîte de dialogue de connexion sous Android?

Voici mon code:

public void btn_edit_click(View v){ 
     LayoutInflater li = LayoutInflater.from(context); 
     View prompt = li.inflate(R.layout.prompts, null); 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
     alertDialogBuilder.setView(prompt); 
     final String username = getIntent().getStringExtra("USERNAME"); 
     final EditText user = (EditText) prompt.findViewById(R.id.loginEmail); 
     final EditText pass = (EditText) prompt.findViewById(R.id.loginPassword); 
     final TextView msg = (TextView) prompt.findViewById(R.id.login_error); 
     final String password = pass.getText().toString(); 
     user.setText(getIntent().getStringExtra("USERNAME")); 
     if(this.selected_website != null){ 
      alertDialogBuilder.setCancelable(false) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        DBAdapter dbUser = new DBAdapter(PasswordActivity.this); 
        dbUser.open(); 
        if(dbUser.Login(username, password)) 
        { 
         show_add_layout(); 

        } 
        else 
        { 
         msg.setText("Username or Password is incorrect"); 
        } 
       } 
       }); 

        alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 

         } 
        }); 
        alertDialogBuilder.show(); 
        }     
        else{ 
         show_mesg("Please select item to edit."); 
        } 
    } 

Lorsque je clique sur le bouton OK, il me donne la mention "Nom d'utilisateur ou mot de passe est incorrect". Mais j'ai tapé le bon nom d'utilisateur et mot de passe. Toute aide à ce sujet?

+1

Veuillez partager votre dbUser.Login (nom d'utilisateur, mot de passe); code de fonction. – Arslan

+0

Où dans le code comparez-vous l'utilisateur entré le nom d'utilisateur et mot de passe avec ceux sur l'enregistrement? –

Répondre

2

Après une heure, j'ai réussi à résoudre mon problème. Donc, je voulais partager cette réponse, donc si quelqu'un rencontre un problème comme je l'ai fait il y a un certain temps, ils peuvent l'utiliser comme une bonne référence.

Ce que j'ai fait, j'ai essayé d'utiliser le code pour ma classe de connexion. Mais je n'ai plus demandé le nom d'utilisateur. Ce que j'ai demandé était seulement le mot de passe. Mais pour le nom d'utilisateur, je reçois l'intention de la connexion précédente. Donc, c'est comme, vous vous êtes connecté avec un nom d'utilisateur "john316" et votre mot de passe est "123abc" et vous serez redirigé vers la classe principale. Là, vous sélectionnez un élément dans la liste, et lorsque vous cliquez sur Modifier, une fenêtre contextuelle s'affiche pour vous demander votre mot de passe à des fins de vérification. MAIS, tout mot de passe ne fonctionnera pas. Il appellera le mot de passe de la base de données et du nom d'utilisateur que vous avez connecté (qui est "john316") s'il est correct, vous serez redirigé vers la classe d'édition. Si c'est faux, il vous montrera, "MOT DE PASSE EST INCORRECT". et vous empêchera d'aller à cette page. Pour raccourcir cette explication, voici le code:

public void btn_edit_click(View v){ 
    LayoutInflater li = LayoutInflater.from(context); 
    View prompt = li.inflate(R.layout.prompts, null); 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
    alertDialogBuilder.setView(prompt); 
    final String username = getIntent().getStringExtra("USERNAME"); 
    final EditText pass = (EditText) prompt.findViewById(R.id.loginPassword); 
    final TextView msg = (TextView) prompt.findViewById(R.id.login_error); 

    if(this.selected_website != null){ 
     alertDialogBuilder.setCancelable(false) 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) { 
       String password = pass.getText().toString(); 

       try{ 
        if(username.equals(getIntent().getStringExtra("USERNAME")) && password.length() > 0) 
        { 
         DBAdapter dbUser = new DBAdapter(PasswordActivity.this); 
         dbUser.open(); 

         if(dbUser.Login(username, password)) 
         { 
          show_add_layout(); 
         }else{ 
          msg.setText("Password is incorrect"); 
         } 
         dbUser.close(); 
        } 

       }catch(Exception e) 
       { 
        Toast.makeText(PasswordActivity.this,e.getMessage(), Toast.LENGTH_LONG).show(); 
       } 
      } 
      }); 

       alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 

        } 
       }); 
       alertDialogBuilder.show(); 
       }     
       else{ 
        show_mesg("Please select item to edit."); 
       } 
} 

Et c'est ainsi que cela fonctionne. Je remercie ceux qui ont répondu à ma question et m'ont un peu aidé. J'espère que celui-ci doit aider les autres aussi. Merci tout le monde!

+1

Que se passe-t-il lorsque vous faites pivoter l'écran? Les recommandations actuelles consistent à utiliser des fragments de dialogue. 2 ans plus tard, cette réponse n'est plus pertinente. – elcuco

1

Apparemment, vous n'obtenez pas le nom d'utilisateur correctement comme passwor, comme vous l'utilisez. Mais vous saisissez le nom d'utilisateur comme mot de passe dans votre Dialog EditText enregistré pour userEmail. Vous devriez utiliser pour obtenir userName entré est

final String username = user.getText().toString(); 

Aussi, vous devez valider Nom d'utilisateur, passowrd pour null, vide avant de vérifier dans DB

Questions connexes