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文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.logintest.MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请输入用戶名" android:textSize="18dp" /> <EditText android:id="@+id/et_username" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请输入密碼" android:textSize="18dp" /> <EditText android:id="@+id/et_pwd" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="numberPassword" android:textSize="18dp" /> <RadioGroup android:id="@+id/rg_mode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <RadioButton android:id="@+id/rb_private" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="私有的" /> <RadioButton android:id="@+id/rb_public" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="公有的" /> <RadioButton android:id="@+id/rb_readable" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="可读的" /> </RadioGroup> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <CheckBox android:id="@+id/cb_checked" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="记住密码" android:textSize="18dp" /> <Button android:id="@+id/bt_login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="登陆" android:textSize="18dp" /> </RelativeLayout> </LinearLayout>
9.4.4 FileInfo.java文件
package com.example.logintest.service; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import android.content.Context; public class FileInfo { /** * 保存文件到context.getFilesDir()中 * * @param context * 上下文 * @param username * 用戶名 * @param Pwd * 用戶密碼 * @return */ public static boolean saveFileUserInfo(Context context, String username, String Pwd) { File file = new File(context.getFilesDir(), "userinfo.txt"); // context.openFileOutput(file, mode) try { FileOutputStream fos = new FileOutputStream(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()中获得文件目录 * * @param context * @return */ public static Map<String, String> getUserInfo(Context context) { File file = new File(context.getFilesDir(), "userinfo.txt"); FileInputStream fis; try { fis = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String str = br.readLine(); String infos[] = str.split("##"); Map<String, String> map = new HashMap<String, String>(); map.put("username", infos[0]); map.put("userpwd", infos[1]); return map; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } }
9.4.5 MainActivity.java文件
package com.example.logintest; import java.util.Map; import com.example.logintest.service.FileInfo; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private static final String TAG = "MainActivity"; private EditText et_username; private EditText et_pwd; private CheckBox cb_checked; private Button bt_login; @Override protected void onCreate(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<String, String> map = FileInfo.getUserInfo(this); if (map != null) { et_username.setText(map.get("username")); et_pwd.setText(map.get("userpwd")); } } @SuppressLint("ShowToast") @Override public void onClick(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 程序运行界面如下所示
时间: 2024-10-21 22:34:47