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.
Pouvez-vous modifier votre question pour supprimer le code commenté? – Phil
pouvez-vous également inclure vos traces de pile concernant votre accident? –