9.1手机的存储区域
手机的存储区域通常有两个地方:一:手机内部存储空间,理解成一块微硬盘/data/data/;二:外部存储空间SD卡
9.2方法捕获异常的原则
如果方法有返回值,则用try catch捕获,如果方法的返回值是Void类型,则使用throws抛出异常
9.3 上下文Context
Context:是一个类,提供一些方便的api 可以得到应用程序的环境,例如:环境的包名,安装路径,资源路径,资产的路径
9.4 保存文件到手机内存——登陆界面例子程序
9.4.1 项目需求
用户登陆界面如下所示,当勾选保存密码时,则将用户名和密码保存到手机内存上,当下次打开登陆界面时,将自动从手机内存中取出用户名和密码回显在界面上。
9.4.2 工程目录结构如下所示
9.4.3 activity_main.xml文件
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请输入用戶名"android:textSize="18dp" />
android:id="@+id/et_username"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="18dp" />
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请输入密碼"android:textSize="18dp" />
android:id="@+id/et_pwd"android:layout_width="fill_parent"android:layout_height="wrap_content"android:inputType="numberPassword"android:textSize="18dp" />
android:id="@+id/rg_mode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal" >
android:id="@+id/rb_private"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="私有的" />
android:id="@+id/rb_public"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="公有的" />
android:id="@+id/rb_readable"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="可读的" />
android:layout_width="fill_parent"android:layout_height="wrap_content" >
android:id="@+id/cb_checked"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="true"android:text="记住密码"android:textSize="18dp" />
android:id="@+id/bt_login"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="登陆"android:textSize="18dp" />
9.4.4 FileInfo.java文件
packagecom.example.logintest.service;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.util.HashMap;importjava.util.Map;importandroid.content.Context;public classFileInfo {/*** 保存文件到context.getFilesDir()中
*
*@paramcontext
* 上下文
*@paramusername
* 用戶名
*@paramPwd
* 用戶密碼
*@return
*/
public static booleansaveFileUserInfo(Context context, String username,
String Pwd) {
File file= new File(context.getFilesDir(), "userinfo.txt");//context.openFileOutput(file, mode)
try{
FileOutputStream fos= newFileOutputStream(file);//fos.write(username+"##"+Pwd).getB;
fos.write((username + "##" +Pwd).getBytes());
fos.close();return true;
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();return false;
}
}/*** 从文件中读取用户的信息,并保存在Map对象中 從context.getFilesDir()中获得文件目录
*
*@paramcontext
*@return
*/
public static MapgetUserInfo(Context context) {
File file= new File(context.getFilesDir(), "userinfo.txt");
FileInputStream fis;try{
fis= newFileInputStream(file);
BufferedReader br= new BufferedReader(newInputStreamReader(fis));
String str=br.readLine();
String infos[]= str.split("##");
Map map = new HashMap();
map.put("username", infos[0]);
map.put("userpwd", infos[1]);returnmap;
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();return null;
}
}
}
9.4.5 MainActivity.java文件
packagecom.example.logintest;importjava.util.Map;importcom.example.logintest.service.FileInfo;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.os.Bundle;importandroid.text.TextUtils;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.CheckBox;importandroid.widget.EditText;importandroid.widget.Toast;public class MainActivity extends Activity implementsOnClickListener {private static final String TAG = "MainActivity";privateEditText et_username;privateEditText et_pwd;privateCheckBox cb_checked;privateButton bt_login;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_username= (EditText) this.findViewById(R.id.et_username);
et_pwd= (EditText) this.findViewById(R.id.et_pwd);
cb_checked= (CheckBox) this.findViewById(R.id.cb_checked);
bt_login= (Button) this.findViewById(R.id.bt_login);
bt_login.setOnClickListener(this);
Map map = FileInfo.getUserInfo(this);if (map != null) {
et_username.setText(map.get("username"));
et_pwd.setText(map.get("userpwd"));
}
}
@SuppressLint("ShowToast")
@Overridepublic voidonClick(View v) {//TODO Auto-generated method stub
String userName =et_username.getText().toString().trim();
String userPwd=et_pwd.getText().toString().trim();if (TextUtils.isEmpty(userName) ||TextUtils.isEmpty(userPwd)) {
Toast.makeText(this, "用户名为空或用户密码为空", 1).show();
}else{if(cb_checked.isChecked()) {
Log.i(TAG,"请保存密码");if (FileInfo.saveFileUserInfo(this, userName, userPwd)) {
Log.i(TAG,"用戶信息保存成功");
}
}if ("zhangsan".equals(userName) && "123".equals(userPwd)) {
Toast.makeText(this, "用户登陆", 1).show();
}else{
Toast.makeText(this, "登陆失敗", 1).show();
}
}
}
}
9.4.6 程序运行界面如下所示
原文:http://www.cnblogs.com/fuyanan/p/4025450.html