使用共享首选项实现登录的问题

时间:2015-02-13 05:24:01

标签: android login logout

我已经提到了我的应用程序登录和注销过程的完整代码。有时候这段代码可以运行,但有时它只允许我进入菜单活动,即使没有登录。仅供参考:一旦我想实现记住我选项,这个代码真的有效,那么只有所有这些问题出现了。任何人都可以检查这个并找到我的问题或建议我,如果你有任何适当的代码进行这个过程。当我注销并打开应用程序时,有时我可以看到菜单。

我使用了共享首选项而没有使用会话进行登录和注销。这是对的吗。我有点困惑,我真的很感激任何帮助。提前完成。

登录代码

public class LoginActivity extends Activity {

    ProgressDialog prgDialog;

    EditText emailET;
    EditText pwdET;
    String email;
    String password;
    Button button;
    public static String PREFS_NAME = "mypre";
    public static String PREF_EMAIL = "email";
    public static String PREF_PASSWORD = "password";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_login);


        final Button button = (Button) findViewById(R.id.btlogin);
        button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                try {

                    String email = emailET.getText().toString();
                    String password = pwdET.getText().toString();

                    if (Utility.isNotNull(email) && Utility.isNotNull(password)) {

                        if (Utility.validate(email)) {

                            if (emailET.getText().toString().equals(email)
                                    && pwdET.getText().toString()
                                    .equals(password)) {
                                CheckBox ch = (CheckBox) findViewById(R.id.ch_rememberme);
                                if (ch.isChecked())
                                    rememberMe(email, password); 
                            }

                            new LoginAsyncTask(LoginActivity.this).execute(
                                    email, password);
                            Toast.makeText(getApplicationContext(),
                                    "Login process started...",
                                    Toast.LENGTH_LONG).show();
                        }

                        else {
                            Toast.makeText(getApplicationContext(),
                                    "Login error, invalid email",
                                    Toast.LENGTH_LONG).show();                          
                        }
                    }
                    else {
                        Toast.makeText(
                                getApplicationContext(),
                                "Login error, don't leave any field blank",
                                Toast.LENGTH_LONG).show();
                    }
                } catch (Exception ex) {

                }

            }
        });

        final TextView textView = (TextView) findViewById(R.id.link_to_landing);
        textView.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(),
                        LandingActivity.class);
                startActivity(i);
                finish();
                overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
            }
        });
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent i = new Intent(getApplicationContext(),
                    LandingActivity.class);
            startActivity(i);
            overridePendingTransition(R.anim.slide_in_left,
                    R.anim.slide_out_right);
            finish();
            return false;
        }
        return super.onKeyDown(keyCode, event);
    }

    public void onStart() {
        super.onStart();
        // read email and password from SharedPreferences
        getUser();
    }

    public void getUser() {
        SharedPreferences pref = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        String email = pref.getString(PREF_EMAIL, null);
        String password = pref.getString(PREF_PASSWORD, null);

        if (email != null || password != null) {
            // directly show logout form
            showLogout(email);
        }
    }

    public void rememberMe(String user, String password) {
        // save email and password in SharedPreferences
        getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit()
        .putString(PREF_EMAIL, user).putString(PREF_PASSWORD, password)
        .commit();
    }

    public void showLogout(String email) {
        // display log out activity
        Intent intent = new Intent(this, ActivityMenu.class);
        intent.putExtra("user", email);
        startActivity(intent);
        overridePendingTransition(R.anim.slide_in_left,
                R.anim.slide_out_right);
    }

}

退出代码

final RelativeLayout relativeLayout3 = (RelativeLayout) rootView
                .findViewById(R.id.logoutlistview);
        relativeLayout3.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                SharedPreferences pref = getActivity().getSharedPreferences(
                        PREFS_NAME, Context.MODE_PRIVATE);
                String email = pref.getString(PREF_EMAIL, null);
                String password = pref.getString(PREF_PASSWORD, null);
                if (email != null || password != null ) {

                    Editor editor = pref.edit();
                    editor.clear();
                    editor.commit();
                    email = "";
                    password = "";
                    firstname = "";
                    lastname = "";
                    // show login form
                    Intent intent = new Intent(getActivity(),
                            LActivity.class);
                    startActivity(intent);
                    intent.addFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK
                            | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);

                }
                else {

                }
            }
        });

2 个答案:

答案 0 :(得分:0)

使用此方法创建sharedPreference,然后使用相同的名称从同一应用程序中的任何活动中的任何位置访问它

SharedPreference sp;
sp = getApplicationContext().getSharedPreferences(My_PREFERENCE,
            context.MODE_PRIVATE);
Editor e = sp.edit();
e.put(key,value);
 e.commit();

并且在另一个活动中获取相同的sharedPreference时使用此方法

SharedPreference sp;
sp = getApplicationContext().getSharedPreferences(My_PREFERENCE,
            context.MODE_PRIVATE);
sp.get(key,value);

答案 1 :(得分:0)

请查看以下可能对您有帮助的链接。

http://androidapplicationdeveloper.weebly.com/login-and-logout-useing-sharedprefrences.html

在您的代码中,您在注销时没有将共享偏好的值设置为空白。

希望它会对你有所帮助。