2017-07-11 4 views
0

Je veux enregistrer un utilisateur et enregistrer le nom d'utilisateur qui s'est connecté, et l'afficher dans MainActivity comme un Toast ou TextView.Besoin d'un conseil avec mon projet lié à SharedPreferences

Voici le code que j'ai actuellement:

Session.java

public class Session { 
    SharedPreferences sharepref; 
    SharedPreferences.Editor editor; 
    Context context; 

    public Session(Context context){ 
     this.context = context; 
     sharepref = context.getSharedPreferences("mypref", Context.MODE_PRIVATE); 
     editor = sharepref.edit(); 
     editor.commit(); 
    } 

    public void setLoggedin(boolean loggedin){ 

     editor.putBoolean("loggedInmode",loggedin); 
     editor.commit(); 
    } 

    public boolean loggedin(){ 
     return sharepref.getBoolean("loggedInmode", false); 
    } 
} 

LoginActivity.java

public class LoginActivity extends AppCompatActivity{ 
    //private Button login, register; 
    private EditText etUser, etPass; 
    private DatabaseHelper dbHelper; 
    private Session session; 
    private static final String SALT = "50C7BC9D21"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     dbHelper = new DatabaseHelper(this); 
     session = new Session(this); 
     etUser = (EditText)findViewById(R.id.etUsername); 
     etPass = (EditText)findViewById(R.id.etPassword); 
     //login = (Button)findViewById(R.id.btnLogin); 
     //register = (Button)findViewById(R.id.btnRegister); 
     //login.setOnClickListener(this); 
     //register.setOnClickListener(this); 

     if(session.loggedin()){ 
      startActivity(new Intent(LoginActivity.this,MainActivity.class)); 
      finish(); 
     } 
    } 

    /* 
    @Override 
    public void onClick(View v) { 
     switch(v.getId()){ 
      case R.id.btnLogin: 
       login(); 
       break; 
      case R.id.btnRegister: 
       //register(); 
       startActivity(new Intent(LoginActivity.this,RegisterActivity.class)); 
       break; 
      default: 

     } 
    }*/ 

    /** 
    * METHOD THAT WILL BE EXECUTED ONCE THE EXIT BUTTON IS CLICKED 
    * ITS SOLO PURPOSE IS TO TERMINATE THE APPLICATION. 
    * */ 
    public void exitApp(View v){ 
     android.os.Process.killProcess(android.os.Process.myPid()); 
     System.exit(1); 
    } 

    /** 
    * METHOD THAT WILL BE EXECUTED ONCE THE REGISTER BUTTON IS CLICKED 
    * ITS SOLO PURPOSE IS TO TAKE THE USER TO THE REGISTER WINDOW. 
    * */ 
    public void newUser(View v){ 
     startActivity(new Intent(LoginActivity.this,RegisterActivity.class)); 
    } 

    /** 
    * METHOD THAT WILL BE EXECUTED ONCE THE LOGIN BUTTON IS CLICKED 
    * ITS SOLO PURPOSE IT TO COMPARE THE INFORMATION ENTERED IN THE EDITTEXT BOXES 
    * AND SEE IF ITS EQUAL WITH THE INFORMATION STORED IN THE DATABASE. 
    * */ 
    public void loginUser(View v){ 
     String user = etUser.getText().toString(); 
     String pass = etPass.getText().toString(); 

     String passwordToHash = pass; 
     String generatedPassword = null; 
     String finalpw = null; 
     try { 
      // Create MessageDigest instance for MD5 
      MessageDigest md = MessageDigest.getInstance("SHA1"); 
      //Add password bytes to digest 
      md.update(passwordToHash.getBytes()); 
      //Get the hash's bytes 
      byte[] bytes = md.digest(); 
      //This bytes[] has bytes in decimal format; 
      //Convert it to hexadecimal format 
      StringBuilder sb = new StringBuilder(); 
      for(int i=0; i< bytes.length ;i++) 
      { 
       sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)); 
      } 
      //Get complete hashed password in hex format 
      generatedPassword = sb.toString(); 
      finalpw = generatedPassword + SALT; 
      Toast.makeText(this, finalpw, Toast.LENGTH_SHORT).show(); 
     } 
     catch (NoSuchAlgorithmException e) 
     { 
      e.printStackTrace(); 
     } 
     System.out.println(generatedPassword); 

     //THIS WAS FIXED AROUND BECAUSE THE OTHER WAY FETCHING AND EQUALLING WITH DB AN USER COULD PASS BY WITHOUT REGESTERING. 
     if(dbHelper.getUser(user,finalpw)){ 
      session.setLoggedin(true); 
      startActivity(new Intent(LoginActivity.this, MainActivity.class)); 
      finish(); 
     }else{ 
      Toast.makeText(getApplicationContext(), R.string.wrong_info,Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private static final int REQUEST_CODE_ADD_CONTACT = 1; 
    private Session session; 
    //private TaskAdapter taskAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     session = new Session(this); 
     if (!session.loggedin()) { 

      logout(); 
     } 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
          } 
     }); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == REQUEST_CODE_ADD_CONTACT) { 
      if (resultCode == RESULT_OK) { 

      } 
     } 

    } 

    public void logout() { 
     session.setLoggedin(false); 
     finish(); 
     startActivity(new Intent(MainActivity.this, LoginActivity.class)); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_logout) { 
      logout(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

} 

Pour répéter, vous souhaitez enregistrer les informations de connexion de l'utilisateur. Plus précisément, je veux enregistrer le nom d'utilisateur qui s'est connecté et l'afficher dans MainActivity en tant que Toast ou TextView. Pour ce que j'ai lu, je l'ai essayé avec intent.putextra et avec bundle, il fonctionnera à la première installation, mais après cela, il va planter l'application, donc je l'ai essayé avec sharedpreference et a créé une session.

Je suis un peu bloqué ici. Comment puis-je enregistrer dans la session chaque utilisateur différent, puis afficher son nom d'utilisateur dans MainActivity? Désolé si je fais quelque chose de mal c'est mon premier post.

+0

Pouvez-vous modifier votre question pour supprimer le code commenté? – Phil

+0

pouvez-vous également inclure vos traces de pile concernant votre accident? –

Répondre

0

Vous pouvez créer un autre paramètre pouvant être placé dans SharedPref. Par exemple, dans votre jeu loggin:

public void setLoggedin(boolean loggedin, String username){ 

    editor.putBoolean("loggedInmode",loggedin); 
    editor.putString("username",username); 
    editor.commit(); 
} 

Et dans votre activité principale pour obtenir le nom d'utilisateur, vous pouvez faire une autre méthode:

public boolean getUsername(){ 
    return sharepref.getString("username", ""); 
} 

vous pouvez l'appeler avec String username = session.getUsername();

+0

merci beaucoup c'était le problème désolé il m'a fallu un certain temps pour répondre, occupé avec d'autres projets scolaires aussi bien. –

+0

@DigitalShield l'accepter comme réponse correcte puis –