转自:http://www.2cto.com/kf/201401/272336.html
我们不管在开发一个项目或者使用别人的项目,都有用户登录功能,为了让用户的体验效果更好,我们通常会做一个功能,叫做保存用户,这样做的目地就是为了让用户下一次再使用该程序不会重新输入用户名和密码,这里我使用3种方式来存储用户名和密码
1、通过普通 的txt文本存储
2、通过properties属性文件进行存储
3、通过SharedPreferences工具类存储
第一种:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/** * 保存用户名和密码的业务方法
*
* @param username
* @param password
* @return
*/
public static boolean saveUserInfo(String username, String password) {
try {
// 使用当前项目的绝对路径
File file = new File( "data/data/com.example.android_file_handler/info.txt" );
// 创建输出流对象
FileOutputStream fos = new FileOutputStream(file);
// 向文件中写入信息
fos.write((username + "##" + password).getBytes());
// 关闭输出流对象
fos.close();
return true ;
} catch (Exception e) {
throw new RuntimeException();
}
}
|
这里写的路径是当前项目的绝对路径,这样做是有缺陷的,比如你将项目路径改了,这里的路径就获取就失败了,所以Android提供了通过上下文一个方法获取当前项目的路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public static boolean saveUserInfo(Context context, String username,
String password) {
try {
// 使用Android上下问获取当前项目的路径
File file = new File(context.getFilesDir(), "userinfo.txt" );
// 创建输出流对象
FileOutputStream fos = new FileOutputStream(file);
// 向文件中写入信息
fos.write((username + "##" + password).getBytes());
// 关闭输出流对象
fos.close();
return true ;
} catch (Exception e) {
throw new RuntimeException();
}
}
|
上面这两个方法都是存储用户名和密码,接下来是获取用户名和密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
/** * 获取普通txt文件信息
*
* @param context
* @return
*/
public static Map<string, object= "" > getTxtFileInfo(Context context) {
try {
// 创建FIle对象
File file = new File(context.getFilesDir(), "userinfo.txt" );
// 创建FileInputStream对象
FileInputStream fis = new FileInputStream(file);
// 创建BufferedReader对象
BufferedReader br = new BufferedReader( new InputStreamReader(fis));
// 获取文件中的内容
String content = br.readLine();
// 创建Map集合
Map<string, object= "" > map = new HashMap<string, object= "" >();
// 使用保存信息使用的##将内容分割出来
String[] contents = content.split( "##" );
// 保存到map集合中
map.put( "username" , contents[ 0 ]);
map.put( "password" , contents[ 1 ]);
// 关闭流对象
fis.close();
br.close();
return map;
} catch (Exception e) {
e.printStackTrace();
return null ;
}
}</string,></string,></string,>
|
这里我将获取到的内容封装到Map集合中,其实使用普通的txt文本存储用户名和密码是有缺陷的,这里我是通过“##”来分割用户名和密码的,那么如果用户在密码中的字符又包含了“#”这个特殊符号,那么最后在获取时,则获取不倒原来保存的信息,所以个人认为dier中方法就可以解决这个问题
第二种:
使用属性文件保存用户名和密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/** * 使用属性文件保存用户的信息
*
* @param context 上下文
* @param username 用户名
* @param password 密码
* @return
*/
public static boolean saveProUserInfo(Context context, String username,
String password) {
try {
// 使用Android上下问获取当前项目的路径
File file = new File(context.getFilesDir(), "info.properties" );
// 创建输出流对象
FileOutputStream fos = new FileOutputStream(file);
// 创建属性文件对象
Properties pro = new Properties();
// 设置用户名或密码
pro.setProperty( "username" , username);
pro.setProperty( "password" , password);
// 保存文件
pro.store(fos, "info.properties" );
// 关闭输出流对象
fos.close();
return true ;
} catch (Exception e) {
throw new RuntimeException();
}
}
|
读取属性文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/** * 返回属性文件对象
*
* @param context 上下文
* @return
*/
public static Properties getProObject(Context context) {
try {
// 创建File对象
File file = new File(context.getFilesDir(), "info.properties" );
// 创建FileIutputStream 对象
FileInputStream fis = new FileInputStream(file);
// 创建属性对象
Properties pro = new Properties();
// 加载文件
pro.load(fis);
// 关闭输入流对象
fis.close();
return pro;
} catch (Exception e) {
e.printStackTrace();
return null ;
}
}
|
在主方法中调用即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// 获取属性文件对象 Properties pro=LoginService.readSDCard( this );
// 获取用户名或密码
if ( null != pro) {
String username=pro.getProperty( "username" );
String password=pro.getProperty( "password" );
// 如果获取到的用户名或密码不为空,则设置到文本框中
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
// 设置用户名
etUsername.setText(username);
// 设置密码
etPassword.setText(password);
}
}
|
第三种:
使用SharedPreferences保存用户名和密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/** * 使用SharedPreferences保存用户登录信息
* @param context
* @param username
* @param password
*/
public static void saveLoginInfo(Context context,String username,String password){
//获取SharedPreferences对象
SharedPreferences sharedPre=context.getSharedPreferences( "config" , context.MODE_PRIVATE);
//获取Editor对象
Editor editor=sharedPre.edit();
//设置参数
editor.putString( "username" , username);
editor.putString( "password" , password);
//提交
editor.commit();
}
|
在主方法中读取:
1
2
3
|
SharedPreferences sharedPre=getSharedPreferences( "config" , MODE_PRIVATE);
String username=sharedPre.getString( "username" , "" );
String password=sharedPre.getString( "password" , "" );
|
使用普通txt文件与属性文件保存都是保存到内部存储设备中,我们也可以保存的SDCard中,使用Android提供的Environment类就可以获取到外部存储设备
1
|
File file= new File(Environment.getExternalStorageDirectory(), "info.properties" );
|
如果要使用绝对路径
1
|
File file = new File( "/sdcard/info.properties" );
|
最后就是需要添加权限,因为获取外部存储设备是有关安全的,所以需要添加相关的权限
1
|
<uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>
|
使用这几种方法就可以实现保存用户名和密码这个功能了,至于有没有其他的方法,我想这几种应该就够用了
相关推荐
1. **SharedPreferences**: Android系统提供了一个轻量级的数据存储方式,即SharedPreferences,用于保存简单的键值对数据,如用户名和密码。这些数据通常是非持久化的,但可以在应用程序的生命周期内保持。在登录...
Android 实现记住用户名和密码的功能是通过SharedPreference 存储来实现的。创建一个复选按钮,通过按钮的否选取来进行事件处理。若按钮选中存储账号和密码的信息。若按钮没有选中,则清空账号和密码的信息。 结果...
android 用户名和密码的保存demo
综上所述,实现“记住用户名和密码”的功能主要涉及SharedPreferences的使用,包括数据的保存和读取。同时,UI设计的细节,如shape和图片选择,也对用户体验有着重要影响。在实际开发中,要确保界面的一致性,提供...
在Android应用开发中,用户登录是一项常见的功能,而如何安全地保存用户名和密码,以便用户在下次打开应用时能够自动登录或快速切换账户,是一个重要的议题。本篇将详细讲解如何利用`SharedPreferences`来实现这一...
本压缩包包含了一些关于Android平台上的登录注册功能的实现,尤其是条件判断、用户名和密码的验证、登录后跳转到主页面以及记住密码和自动登录的机制。以下是这些关键知识点的详细解释: 1. **条件判断**:在登录...
最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现。 SharedPreferences简介 ...SharedPreferences使用实例:记住用户名密码自动登录 大致了解了SharedPre
在`Editor`对象上,我们可以设置键值对,例如保存用户名和密码: ```java editor.putString("username", username); editor.putString("password", password); ``` 设置完成后,需要调用`commit()`或`apply()`方法...
在Android应用程序开发中,实现“记住用户名和密码自动登录”的功能是提高用户体验的重要一环。这一功能使得用户在下次打开应用时,无需每次都输入登录凭据,极大地简化了登录流程。下面将详细介绍如何在Android中...
SharedPreferences是Android提供的一个轻量级存储类,经常用于保存软件设置参数。存放的格式为xml,文件存放在 /data/data/<package name>/shared_prefs下。
- **SharedPreferences**:这是一个轻量级的存储机制,用于保存用户的登录状态,例如登录成功后,可以将用户名和密码(或者加密后的值)存入SharedPreferences,以便下次自动登录。 - **密码安全**:虽然示例中的...
保存用户名和密码时: ```java editor.putString("username", username); editor.putString("password", password); editor.apply(); ``` 读取用户名和密码: ```java String storedUsername = preferences....
例如,保存用户名和密码: ```java SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("username1", "user1"); editor.putString("password1", "pass1"); // 如果有更多用户,重复...
以下是如何使用SharedPreferences保存用户名和密码的步骤: 1. 在需要保存数据的地方,获取SharedPreferences实例: ```java SharedPreferences sharedPreferences = getSharedPreferences("LoginInfo", Context....
当用户勾选时,应将当前的用户名和密码保存;反之,如果用户取消勾选,应清除相关存储信息。 3. **加密安全**:由于用户名和密码是敏感信息,因此在存储时必须进行加密处理。常见的加密方法有哈希函数(如MD5、SHA...
当用户勾选“记住密码”选项时,应用会将用户名和加密后的密码保存到SharedPreferences中。下次启动应用时,如果发现有记住的密码,可以自动填充到登录界面。 修改密码功能通常需要用户先进行身份验证,例如通过...
在Android应用开发中,实现客户端自动保存账号密码和自动登录是一项常见的需求,它能提供便捷的用户体验,同时也有助于提高用户留存率。本源码实现了这一功能,并且已验证适用于Android 4.2版本。下面我们将深入探讨...
- **安全存储用户凭证**:用户的用户名和密码不应该硬编码在代码中,而应该使用Android KeyStore系统或者其他安全方式存储,例如使用SharedPreferences加密存储。 - **防止重放攻击**:基础认证头中的信息可以被...
在Android应用开发中,"SharedPreferences记住用户名密码"是一个常见的功能,它允许用户在登录一次之后,再次打开应用时无需重新输入用户名和密码。这个功能提高了用户体验,减少了用户的操作步骤。下面我们将深入...