使用SharedPreferences记住密码的功能

来源:互联网 发布:yield python 编辑:程序博客网 时间:2024/05/17 19:17

本案例实现的功能:强制下线和记住密码的功能。

强制下线的实现思路:用户通过用户名和密码登录主界面,点击主界面按钮,发送一条广播,通知程序强制下线。广播接收器接收广播信息,强制用户下线。

记住密码的实现思路:点击记住密码选项框,将密码信息存入到SharedPreferences中,下次登陆时直接从SharedPreferences中读取信息,显示在EditText中。

1、定义登录界面activity_login.xml,使用的TableLayout布局

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:stretchColumns="1">    <TableRow>        <TextView            android:id="@+id/Account"            android:layout_height="wrap_content"            android:text="Account:"/>        <EditText            android:id="@+id/account_text"            android:layout_height="wrap_content"            android:hint="Input your account"/>    </TableRow>    <TableRow>        <TextView            android:id="@+id/Password"            android:layout_height="wrap_content"            android:text="Password:"           />        <EditText            android:id="@+id/password_text"            android:layout_height="wrap_content"            android:hint="Input your password"/>    </TableRow>    <TableRow>        <CheckBox            android:id="@+id/remember_pass"            android:layout_height="wrap_content"/>        <TextView            android:layout_height="wrap_content"            android:text="Remember password"/>    </TableRow>    <TableRow>        <Button            android:id="@+id/login"            android:layout_height="wrap_content"            android:layout_span="2"            android:text="Login"/>    </TableRow></TableLayout>
2、定义主界面activity_main.xml,主界面只有一个按钮是发送广播的。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <Button        android:id="@+id/force_offline"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Send force offline broadcast"/></LinearLayout>
3、定义一个活动集合类,来管理所有的活动。

public class ActivityCollector {    public static List<Activity> activities=new ArrayList<Activity>();    public static void addActivity(Activity activity)    {        activities.add(activity);    }    public static void removeActivity(Activity activity)    {        activities.remove(activity);    }    public static void finishAll()    {        for(Activity activity:activities)        {            if(!activity.isFinishing())            {                activity.finish();            }        }    }}
4、定义一个BaseActivity将活动从集合类中添加或删除。

public class BaseActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏        ActivityCollector.addActivity(this);    }    @Override    protected void onDestroy() {        super.onDestroy();        ActivityCollector.removeActivity(this);    }}
5、实现LoginActivity的类

public class LoginActivity extends BaseActivity {    private SharedPreferences pref;    private SharedPreferences.Editor editor;    private EditText accountEdit;    private EditText passwordEdit;    private Button login;    private CheckBox rememberPass;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        pref= PreferenceManager.getDefaultSharedPreferences(this);        accountEdit=(EditText)findViewById(R.id.account_text);        passwordEdit=(EditText)findViewById(R.id.password_text);        rememberPass=(CheckBox)findViewById(R.id.remember_pass);        login=(Button)findViewById(R.id.login);        boolean isRemember=pref.getBoolean("remember_password", false);        if(isRemember)        {            String account=pref.getString("account","");            String password=pref.getString("password","");            accountEdit.setText(account);            passwordEdit.setText(password);            rememberPass.setChecked(true);        }        login.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String account=accountEdit.getText().toString();                String password=passwordEdit.getText().toString();                if(account.equals("admin")&&password.equals("123456"))                {//在登录的时候判断,记住密码的选项框有没有选中,选中了则将信息存入到SharedPreference中                    editor=pref.edit();                    if(rememberPass.isChecked())                    {                        editor.putBoolean("remember_password",true);                        editor.putString("account",account);                        editor.putString("password",password);                    }else                    {                        editor.clear();//通过调用clear方法将SharedPreferences文件中的数据全部清除掉。                    }                    editor.commit();                    Intent intent=new Intent(LoginActivity.this,MainActivity.class);                    startActivity(intent);                    finish();                }else{                    Toast.makeText(LoginActivity.this, "account or password is invalid", Toast.LENGTH_SHORT).show();                }            }        });    }}
6、实现MainActivity,发送一条广播,通知强制下线。

public class MainActivity extends BaseActivity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button forceOffline=(Button)findViewById(R.id.force_offline);        forceOffline.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent=new Intent("cn.sict.rememberpassword.FORCE_OFFLINE");                sendBroadcast(intent);            }        });    }}
7、在广播接收器中实现强制下线的功能。

public class ForceOfflineReceiver extends BroadcastReceiver {    @Override    public void onReceive(final Context context, Intent intent) {        AlertDialog.Builder dialogBuilder=new AlertDialog.Builder(context);        dialogBuilder.setTitle("Warning");        dialogBuilder.setMessage("You are forced to be offline.Please try to login again");        dialogBuilder.setCancelable(false);        dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                ActivityCollector.finishAll();//销毁所有的活动                Intent intent = new Intent(context, LoginActivity.class);                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                context.startActivity(intent);//重新启动LoginActivity            }        });        AlertDialog alertDialog=dialogBuilder.create();        alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);        alertDialog.show();    }}
实验结果如下所示:









0 0