1. 界面的准备工作,普通登录界面,采用线性布局和相对布局。

<Checkbox/>有个属性android:checked=”true”,默认选中状态,相对布局里面<Button/>位于右边android:layout_alignParentRight=”true”,位于父控件的右面。密码框星号显示android:inputType=”textPassword”

2. 遇到devicenotfound等错误可以直接忽略掉,布局文件属性里面绑定点击方法,传入的参数View对象代表当前按钮,控件首先都声明在Activity的成员属性里面,在onCreate()方法里面初始化,初始化控件一定要在setContentView()方法加载完界面之后才行。

3. 复选框判断是否选中使用CheckBox对象的isChecked()方法,判断字符串是否相等用String对象的equals()方法,logcat如果无法打印日志,关闭logcat重开或者关闭eclipse

4. 保存文件javaSE里面是直接newFile(“aaa.txt”),文件默认保存在工程的目录下面,但是在android系统里面,这样默认是创建在/data/app目录下面,这里是不允许创建文件的。Android下每一个应用都有自己的数据文件夹/data/data/包名/

5. 新建一个业务类来处理保存信息的操作。这里的写法和javaSE一样,newFile(“/data/data/包名/文件名”)对象,newFileOutputStream()对象,此时会有异常抛出,因为我们这个方法有返回boolean值,所以我们捕获掉,如果是无返回值那就throwsException抛出去。字符串信息getBytes()转成字节数组,调用foswrite()方法,关闭fos。当这个方法没有使用类的成员属性的时候,谷歌推荐把这个方法定义成static静态的,效率更高

6. 文件路径部分,如果按照上面所写,灵活性很差。当我改变包名的时候,程序会报错,R文件要从新导一下,并且android会认为是个新的应用。谷歌提供了一个api来获取应用的数据目录,调用Context上下文对象的getFilesDir()方法,返回的是/data/data/包名/files/。因此可以这样newFile(context.getFilesDir(),"info1.txt");来写。

7. 数据目录还有个文件夹是cache目录,调用Context对象的getCacheDir()来获取,这个目录可以通过设置里面清除缓存清掉,这个目录不能存放过大的文件

8. 上下文就是一个类提供了方便的api可以得到应有程序的环境,可以获取包名,文件路径,资源路径,资产路径等

9. 读取保存文件的信息,同样newFile(),newFileInputStream(),

activity代码:

package com.tsh.savefile;import java.util.Map;import org.w3c.dom.Text;import com.tsh.savefile.service.LoginService;import android.app.Activity;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {    private EditText et_username;    private EditText et_password;    private CheckBox cb_rember;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_username=(EditText) findViewById(R.id.et_username);        et_password=(EditText) findViewById(R.id.et_password);        cb_rember=(CheckBox) findViewById(R.id.cb_rember);        //读取        Map<String, String> info=LoginService.getSavedUserInfo(this);        if(info != null){            et_username.setText(info.get("username"));            et_password.setText(info.get("password"));        }    }    /**     * 登陆     * @param v     */    public void login(View v){        String username=et_username.getText().toString().trim();        String password=et_password.getText().toString().trim();        if(TextUtils.isEmpty(username)||TextUtils.isEmpty(password)){            Toast.makeText(this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();        }        //记住密码        if(cb_rember.isChecked()){            Boolean res=LoginService.saveUserInfo(this,username, password);            if(res){                Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();            }else{                Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();            }        }        //验证        if(username.equals("taoshihan")&&password.equals("1")){            Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();        }else{            Toast.makeText(this, "用户名或密码错误", Toast.LENGTH_SHORT).show();        }    }}

业务类代码:

package com.tsh.savefile.service;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import android.content.Context;public class LoginService {    /**     * 保存用户名和方法的业务方法     * @param context 上下文     * @param username 用户名     * @param password 方法     * @return     */    public static boolean saveUserInfo(Context context,String username,String password){        File file=new File(context.getFilesDir(),"info1.txt");        try {            FileOutputStream fos=new FileOutputStream(file);            String info=username+"##"+password;            fos.write(info.getBytes());            fos.close();            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }            }    /**     * 读取     * @return     */    public static Map<String,String> getSavedUserInfo(Context context){        File file=new File(context.getFilesDir(),"info1.txt");        try {            FileInputStream fis=new FileInputStream(file);            BufferedReader br=new BufferedReader(new InputStreamReader(fis));            String[] res=br.readLine().split("##");            Map<String, String> map=new HashMap<String,String>();            map.put("username", res[0]);            map.put("password", res[1]);            return map;        } catch (Exception e) {            e.printStackTrace();            return null;        }            }}

layout代码:

<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"    tools:context="com.tsh.savefile.MainActivity" >    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="登录名" />    <EditText        android:id="@+id/et_username"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="密码" />    <EditText        android:id="@+id/et_password"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:inputType="textPassword" />    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content" >        <CheckBox            android:id="@+id/cb_rember"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:checked="true"            android:text="记住密码" />        <Button            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:onClick="login"            android:text="登陆" />    </RelativeLayout></LinearLayout>

更多相关文章

  1. Android之ContextMenu的使用方法以及与OptionMenu的区别
  2. Android 摇一摇太灵敏的解决方法
  3. Android加载Html的方法
  4. android window的requestWindowFeature()的使用方法
  5. Android上实现zlib解压缩的方法 Inflater用法
  6. Android N 7.0中报错:android.os.FileUriExposedException的解决
  7. Android Studio打包生成Jar包的方法
  8. android集成百度地图SDK 自定义keystore无法编译 Keystore was t
  9. Android:启动页有短暂白屏的解决方法

随机推荐

  1. Android自定义TTF字体
  2. network: android 网络判断
  3. Android(安卓)Makefile and build system
  4. 改进Android(安卓)SlidingMenu实现QQ样式
  5. Layout 笔记
  6. 写在20111112:单行可滚动显示的GridView
  7. Android layout 设置圆角 内部 imageview
  8. ANDROID 编译源码6.0 问题记录
  9. android 7.1 默认壁纸拉伸问题
  10. android TextUtils的使用