0

我是 Android 开发的新手。在我的代码中,我使用共享首选项来存储和检索用户名和密码。我通过我学习的教程之一实现了这一点。我创建了一个名为 remember() 的方法,并在我的复选框中调用它在单击方法上单击。但是当我单击复选框并不幸运行我的程序时,它被停止了。

这是我的代码。谁能找到我做错的地方?

public void onClick(View v) {
            if(chkbx.isChecked())
            remember();

            final TextView username =(TextView)findViewById(R.id.username);
            final TextView password =(TextView)findViewById(R.id.password);
            String uname = username.getText().toString();
            String pass =  password.getText().toString();


               String storedPassword=loginDataBaseAdapter.getSinlgeEntry(uname);
            if(!uname.equals("")  && !pass.equals("")&&pass.equals(storedPassword))
                startActivity(new Intent(LoginActivity.this,welcomeActivity.class).putExtra("usr",(CharSequence)uname));
             else 

                Toast.makeText(LoginActivity.this,"Invalid UserName or Password", Toast.LENGTH_LONG).show();



        }
    });

这是记住方法

private void remember(){

        final TextView username =(TextView)findViewById(R.id.username);
        final TextView password =(TextView)findViewById(R.id.password);
        String uname = username.getText().toString();
        String pass =  password.getText().toString();
        SharedPrefManager.SetName(uname); 
            SharedPrefManager.SetName(pass); 
         SharedPrefManager.StoreToPref();

        SharedPrefManager.LoadFromPref(); 
         String usrname,pswd;
        usrname = SharedPrefManager.GetName();
       pswd= SharedPrefManager.GetPass();


       EditText tv = null;
        tv = (EditText)findViewById(R.id.username);
        tv.setText(usrname);
        tv = (EditText)findViewById(R.id.password);
        tv.setText(pswd);

    }
4

1 回答 1

0

使用以下代码记住我的功能,它对我有用。首先创建一个如下所示的类

package com.example.fitnessapp;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class SessionManager {

    SharedPreferences pref;
    Editor editor;
    Context context;

    int PRIVATE_MODE = 0;

    public static final String PREF_NAME = "FitPref";
    private static final String IS_LOGIN = "IsLoggedIn";
    public static final String KEY_USERNAME = "username";
    public static final String KEY_PASSWORD = "password";
    private boolean isChecked = false;

    public SessionManager(Context context) {
        this.context = context;
        pref = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();
    }

    public void createLoginSession(String username, String password) {
        editor.putBoolean(IS_LOGIN, true);

        editor.putString(KEY_USERNAME, username);
        editor.putString(KEY_PASSWORD, password);
        if (isChecked == true) {
            editor.putBoolean("isChecked", true);
        } else {
            editor.putBoolean("isChecked", false);
        }
        editor.commit();
    }

    public void createLoginSession(String username, String password, boolean remember) {
        editor.putBoolean(IS_LOGIN, true);

        editor.putString(KEY_USERNAME, username);
        editor.putString(KEY_PASSWORD, password);
        editor.putBoolean("remember", remember);
        editor.commit();
    }

    public void checkLogin() {
        if (!this.isLoggedIn()) {
            Intent i = new Intent(context, MainActivity.class);

            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            context.startActivity(i);
        }
    }

    public boolean isLoggedIn() {
        return pref.getBoolean(IS_LOGIN, false);
    }
}

之后在您的 MainActivity 中使用以下代码存储用户名和密码。

if (remember.isChecked() == true) {
    sm.createLoginSession(user, pass, true);
   } 

要取回该用户名和密码,请使用以下代码。

SharedPreferences pref = MainActivity.this.getSharedPreferences(SessionManager.PREF_NAME, 0);
        boolean loggedIn = pref.getBoolean("remember", false);
        if (loggedIn == true) {
            remember.setChecked(true);
            String user = pref.getString(SessionManager.KEY_USERNAME, "");
            String pass = pref.getString(SessionManager.KEY_PASSWORD, "");

            username.setText(user);
            password.setText(pass);
        }

希望它可以帮助你。

于 2013-10-21T07:07:47.220 回答