#android #login #sharedpreferences
#Android #войти #sharedpreferences
Вопрос:
Я хочу проверить, зарегистрирован ли пользователь уже в приложении, поэтому, если пользователь не зарегистрирован, он будет перенаправлен Login.class
, и если пользователь уже зарегистрирован, он будет перенаправлен на него Profile.class
.
Я видел учебное пособие по проверке входа пользователя в систему из Интернета SplashActivity.class
, но я попробовал его и не сработал для меня, я не знаю, может быть, я просто не понимаю, как это работает, поскольку я новичок в программировании
мои коды:
Класс входа
public class DocLogin extends Fragment {
ImageView ivIcon;
TextView tvItemName, tvRegister;
EditText user, pass;
Button btnLogin;
String username, password;
SQLController dbcon;
SharedPreferences sh_Pref;
Editor editor;
private static final String IS_LOGIN = "IsLoggedIn";
int PRIVATE_MODE = 0;
public DocLogin() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.doc_log_in, container, false);
dbcon = new SQLController(getActivity());
dbcon.open();
// Log in
user = (EditText) view.findViewById(R.id.etUser);
pass = (EditText) view.findViewById(R.id.etPassword);
btnLogin = (Button) view.findViewById(R.id.btnLogin);
// Sign up
tvRegister = (TextView) view.findViewById(R.id.tvRegDoc);
tvRegister.setMovementMethod(LinkMovementMethod.getInstance());
tvRegister.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.content_frame, new DocReg());
ft.commit();
return false;
}
});
// btnLogin onClickListener
btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
dbcon = new SQLController(getActivity());
dbcon.open();
username = user.getText().toString();
password = pass.getText().toString();
sharedPreferences();
Toast.makeText(getActivity(), "Login Successful", 20).show();
Log.v("LoginDetails", user.getText().toString() "../.."
pass.getText().toString());
Cursor cur = dbcon.getuser_information(user.getText()
.toString(), pass.getText().toString());
if (cur.getCount() != 0) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.content_frame, new DocProfile());
ft.commit();
} else {
AlertDialog alertDialog = new AlertDialog.Builder(
getActivity()).create();
alertDialog.setTitle("Login Error");
alertDialog
.setMessage("Doctor Code and Password does not match");
alertDialog.setButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
// dismiss dialog
}
});
alertDialog.show();
}
}
});
return view;
}
public void sharedPreferences() {
sh_Pref = getActivity().getSharedPreferences("Login Credentials", PRIVATE_MODE);
editor = sh_Pref.edit();
editor.putBoolean(IS_LOGIN, true);
editor.putString("Username", username);
editor.putString("Password", password);
editor.commit();
}
}
Пожалуйста, укажите мне правильный способ достижения моей цели.
Ответ №1:
вам необходимо добавить поле alreadylogin в таблицу входа в базу данных. если пользователь впервые входит в систему, установите для поля alreadylogin значение true, иначе по умолчанию false.Каждый раз вы должны проверять поле alreadylogin.если поле имеет значение true, вы должны перенаправить.
Ответ №2:
Ваш код показывает, что ваши настройки установлены. Итак, укажите следующее, где вы хотите проверить, вошли ли вы в систему или нет.
SharedPreferences sh_Pref = getActivity().getSharedPreferences("Login Credentials", PRIVATE_MODE);
boolean check = sh_Pref.getBoolean(IS_LOGIN, false);
if(check){
Intent intent = new Intent(this, Profile.class);
startActivity(intent);
finish();
}
Если пользователь уже вошел в систему, пользователь будет перенаправлен на Profile.class
Комментарии:
1. могу ли я использовать это в SplashActivity?
2. Вы можете использовать этот фрагмент в любом месте вашего приложения, где вы хотите проверить вход в систему.