2013-05-20 3 views
0

Я работаю в remember me функции в андроиде, где я сохранил имя пользователя и пароль в классе хранения, storage класса есть класс, где я реализовать Shared preferences.Запомнить меня андроид приложения

Что я сделал

Сначала я проверяю, что если флажок установлен или нет, если он проверен, я сохраняю значение в классе хранения (общие настройки). И в службе входа в систему я вызываю имя пользователя с паролем.

Вот код:

Внутри OnCreate

boolean isChecked = true; 

    login_submit_btn.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        LoginService(); 
       } 
      }); 


    chkRememberMe.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()  
      { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        if(isChecked){ 
         storage.saveUserName(Login.this, mUserName); 
         storage.savepass(Login.this, mPassword); 


        } 
       } 
      }); 
    } 

снаружи:

protected void LoginService() { 
    // TODO Auto-generated method stub 




     mUserName = login_email_edit.getText().toString().trim(); 
     mPassword = login_password_edit.getText().toString().trim(); 

     if (chkRememberMe.isChecked()) { 

      mUserName=storage.getUserName(Login.this); 
      mPassword=storage.getpass(Login.this); 

     } 


    if (mUserName.length() == 0) { 
     AlertDialog(" Enter Email ", Login.this); 
    } else if (isContainsEmpty(mUserName)) { 
     login_submit_btn.setEnabled(true); 
    AlertDialog("Valid Email Address", Login.this); 
    } 

    else if(mPassword.length() == 0){ 
     AlertDialog("Password should not be blank", Login.this); 
    } 
    } 

Кто-нибудь может понять мою ошибку @ Спасибо

+0

Какова ваша актуальная проблема при использовании этого кода? –

+0

@BasimSherif функция помнить меня не работает –

+0

Почему вы объявляете «isChecked» как истинный? –

ответ

0

я ту же функцию, тоже. ,

вот мой код для справки. Посмотрите, может ли это вам помочь: D

Кроме того, я храню его в классе как статический метод.

public static boolean setPref(String index, String value){ 
    App.mSharedPreferencesEditor.putString("index", "value"); 
    return App.mSharedPreferencesEditor.commit(); 
} 

public static String getPref(String index){ 
..... 
} 

:: Под редакцией

внутри

boolean isChecked = true; 

    login_submit_btn.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        LoginService(); 
       } 
      }); 
    } 

вне

protected void LoginService() { 
    // TODO Auto-generated method stub 
     mUserName = login_email_edit.getText().toString().trim(); 
     mPassword = login_password_edit.getText().toString().trim(); 

     if (chkRememberMe.isChecked()) { 

      storage.saveUserName(Login.this, mUserName); 
      storage.savepass(Login.this, mPassword); 

     } else { 

      storage.saveUserName(Login.this, ""); 
      storage.savepass(Login.this, ""); 

     } 


    if (mUserName.length() == 0) { 
     AlertDialog(" Enter Email ", Login.this); 
    } else if (isContainsEmpty(mUserName)) { 
     login_submit_btn.setEnabled(true); 
    AlertDialog("Valid Email Address", Login.this); 
    } 

    else if(mPassword.length() == 0){ 
     AlertDialog("Password should not be blank", Login.this); 
    } 
    } 
+0

У вас есть ошибка? Или нет ошибки, но не работает? –

+0

mUserName = storage.getUserName (Login.this); mPassword = storage.getpass (Login.this); Вы должны положить его в сторону onCreate ?? Затем prev. логин и пароль будут отображаться после загрузки приложения. –

+0

Добро пожаловать, проголосуйте за меня, если ответ полезен: D –

1

Ваш код, кажется, не правы, вы сохраняете учетные данные, но не удаляя их в любом месте , Также, если я изменил имя пользователя и пароль, а помнить, что я уже проверен, ваш код не сохраняет учетные данные. Удалите setOnCheckedChangeListener, это бесполезно.

Это должно быть процесс:

  1. При вводе логина активности, вы должны проверить, если какие-либо учетные данные уже сохранены, если они вы должны показать их в TextViews (имя пользователя и пароль полей) и флажок «Запомнить меня» должен быть установлен по умолчанию.

  2. Теперь, если нет учетных данных, сохраненных ранее (например, первый раз Логина) не показываю ничего, и при нажатии пользователя кнопка Логина и Войти успешны

    2,1. Если вы помните меня, то вы должны сохранить учетные данные.

    2.2.иначе, если он был снят ясно полномочия

EDIT:

удалить setOnCheckedChangeListener

в OnCreate метод после

email=storage.getUserName(Login.this); 
password=storage.getpass(Login.this); 

Помещенный

login_email_edit.setText(email); 
login_password_edit.setText(password); 

Теперь внутри Войти службы

if(chkRememberMe.isChecked()) { 
    storage.saveUserName(Login.this, mUserName); 
    storage.savepass(Login.this, mPassword); 
}else 
    { 
    storage.saveUserName(Login.this, ""); 
    storage.savepass(Login.this, ""); 
} 

удалить приложение и установить снова

+0

Спасибо! Все, что мне нужно сделать в методе OnCreate –

+0

да, получение учетных данных должно быть выполнено в OnCreate, но сохранение и удаление учетных данных должно быть выполнено после нажатия на вход. – Naveen

+0

в OnCreate \t Я звоню по электронной почте = storage.getUserName (Login.this); \t \t password = storage.getpass (Login.this); и в службе бокового входа, назначая \t login_email_edit.SetText (электронная почта); \t \t \t \t login_password_edit.setText (password); Все еще не работает –

0

Я использую Sharedpreference для этой же функциональности,

EditText login_email_edit=(EditText)findViewById(R.id.editText1); 
    Button login_submit_btn=(Button)findViewById(R.id.button1); 
    final CheckBox chkRememberMe=(CheckBox)findViewById(R.id.checkBox1); 


    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
    editor = pref.edit(); 

    if(pref.getString("key_username", null)!=null) 
    { 

     text.setText(pref.getString("key_username", null));//Here we retrieve username from shared preference and set it to edittext. 

    } 

    login_submit_btn.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
          if(chkRememberMe.isChecked()) 
        { 

         editor.putString("key_username", text.getText().toString()); 
         editor.commit(); 
         LoginService();//Now your username is stored in shared preference 

        } 

        else 
        { 
         //Username is not stored.because remember me is unchecked 
         LoginService(); 
        } 




       } 
      }); 
+0

Спасибо, Basim, но все будет хорошо, если вы попробуете мой код! –

+0

Ответ отредактирован. И теперь его код. –

+0

После входа в систему Каждая вещь, работающая нормально после переключения и включения устройства без выхода из системы, снова запрашивает данные для входа. Обращайтесь, пожалуйста, helpme – Harsha

0

ПОЛНОГО ПОМНИТЕ МЕНЯ ФУНКЦИОНАЛЬНОСТЬЮ с использованием разделяемой PRFERENCES

xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <LinearLayout 
     android:id="@+id/login_form" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:orientation="vertical"> 

     <EditText 
      android:id="@+id/etUserName" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dp" 
      android:hint="Username" 
      android:padding="10dp" /> 

     <EditText 
      android:id="@+id/etPassword" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="Password" 
      android:padding="10dp" /> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@id/etPassword" 
      android:orientation="horizontal"> 

      <ImageView 
       android:id="@+id/ivRememberMe" 
       android:layout_width="35dp" 
       android:layout_height="35dp" 
       android:layout_centerVertical="true" 
       android:src="@drawable/holo_circle" /> 

      <TextView 
       android:id="@+id/tvRememberMe" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerVertical="true" 
       android:layout_marginLeft="6dp" 
       android:layout_toRightOf="@+id/ivRememberMe" 
       android:text="Remember Me" 
       android:textAppearance="?android:attr/textAppearanceSmall" /> 
     </RelativeLayout> 

     <Button 
      android:id="@+id/btnSignIn" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="15dp" 
      android:text="Sign in" 
      android:textColor="@android:color/white" /> 
    </LinearLayout> 

</RelativeLayout> 

Войти Класс:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    private ImageView ivRememberMe; 
    private Button btnLogin; 
    private EditText etUserName, etPassword; 
    private String userName, password; 
    private static boolean rememberMe; 
    String USERNAME = "username"; 
    String PASSWORD = "password"; 
    String REMEMBER_ME = "remember me"; 

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

     initValues(); 
    } 

    private void initValues() { 
     try { 
      btnLogin = (Button) findViewById(R.id.btnSignIn); 
      btnLogin.setOnClickListener(this); 

      etUserName = (EditText) findViewById(R.id.etUserName); 
      etPassword = (EditText) findViewById(R.id.etPassword); 

      //Persist credentials, if remember me is checked 
      SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
      if (pref.contains(USERNAME) && pref.contains(PASSWORD)) { 
       etUserName.setText(pref.getString(USERNAME, "")); 
       etPassword.setText(pref.getString(PASSWORD, "")); 
       if (pref.getBoolean(REMEMBER_ME, true)) { 
        ((ImageView) findViewById(R.id.ivRememberMe)).setImageResource(R.drawable.checkbox_marked_circle); 
       } 
      } 
      ivRememberMe = (ImageView) findViewById(R.id.ivRememberMe); 
      ivRememberMe.setOnClickListener(this); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public void onClick(View v) { 
     try { 
      switch (v.getId()) { 
       case R.id.btnSignIn: 
        validateCredentials(); 
        onLogin(); 
        break; 
       case R.id.ivRememberMe: 
        rememberMe = !rememberMe; 
        ((ImageView) findViewById(R.id.ivRememberMe)).setImageResource(rememberMe ? R.drawable.checkbox_marked_circle : R.drawable.holo_circle); 
        checkPersistCredentials(etUserName.getText().toString().trim(), etPassword.getText().toString()); 
        break; 
       default: 
        break; 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void validateCredentials() { 
     try { 
      userName = etUserName.getText().toString(); 
      password = etPassword.getText().toString(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 


    public void onLogin() { 
     //implement your login logic 
    } 


    private void checkPersistCredentials(String userName, String password) { 
     rememberMe(userName, password, this); 
    } 

    public void rememberMe(final String username, String password, Context context) { 
     try { 

      SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
      SharedPreferences.Editor edit = sharedPreferences.edit(); 
      if (rememberMe) { 
       if (username.isEmpty() && password.isEmpty()) { 

       } else { 
        edit.putString(USERNAME, username); 
        edit.putString(PASSWORD, password); 
        edit.putBoolean(REMEMBER_ME, true); 
        edit.commit(); 
       } 
      } else { 
       edit.clear(); 
       edit.commit(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 
Смежные вопросы