保存文件到手机内存

这里写图片描述
MainActivity.java

package com.example;

import java.util.Map;
import com.example.service.loginService;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.util.Log;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {
    private static final String TAG = "MainActivity"; //日志   一般是类名"MainActivity"
    private EditText et_username;
    private EditText et_password;
    private CheckBox cb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_username = (EditText)this.findViewById(R.id.et_username);
        et_password = (EditText)this.findViewById(R.id.et_password);
        cb = (CheckBox) findViewById(R.id.cb_remember_pwd);
        //检查是否有保存的账号及密码   若有回显
        Map<String,String> map = loginService.getSavedUserInfo(this);
        if(map!=null){
            et_password.setText(map.get("password"));
            et_username.setText(map.get("username"));
        }
    }
      public void login(View view){
          String username = et_username.getText().toString().trim();
          String password = et_password.getText().toString().trim();
          if(TextUtils.isEmpty(username)||TextUtils.isEmpty(password)){
             Toast.makeText(this, "用户名或密码不能为空", 1).show(); 
          }else{
              //判断是否保存密码
              if(cb.isChecked()){  //如果勾选记住密码
                  Log.i(TAG, "需要保存用户名密码"); //日志
                  boolean result = loginService.saveUserInfo(this,username, password);
                  if(result){
                      Toast.makeText(this, "保存用户信息成功", 0).show();
                  }
              }
              //登录 发送消息到服务器,服务器验证是否成功
              if("1477996221".equals(username)&&"666666".equals(password)){
                  Toast.makeText(this, "登陆成功", 1).show();
              }
              else{
                  Toast.makeText(this, "登录失败,账号或密码错误",1).show();
              }
          }
          }
}

/res/layout/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"
    tools:context="com.example.MainActivity" >

  <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="账号"
        />
<EditText
       android:id="@+id/et_username"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />    
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密码"
        />
<EditText
        android:inputType="textPassword" //密码格式
        android:id="@+id/et_password"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        /> 

<RelativeLayout         //线性布局中使用相对布局
       android:layout_width="wrap_content"
       android:layout_height="wrap_content">
<CheckBox
       android:id="@+id/cb_remember_pwd"
       android:checked="true"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="记住密码"
       />
<Button
       android:onClick="login"
       android:layout_alignParentRight="true"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="登录"
       />
</RelativeLayout>

</LinearLayout>

loginSrvice.java 右击 原有包 新建一个package(com.example.service)
右击 新建包 新建一个class(loginSrvice)

package com.example.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.net.ContentHandler;
import java.text.BreakIterator;
import java.util.HashMap;
import java.util.Map;

import org.apache.http.entity.InputStreamEntity;

import android.content.Context;

public class loginService {
    /*
     ***保存账号密码的业务方法***
     * content 上下文
     * username 账号
     * password 密码
     */
    public static boolean saveUserInfo(Context context, String username, String password){
        try {
            File file = new File(context.getFilesDir(),"Info.txt"); //context.getFilesDir()帮助我们返回一个目录 /date/date/包名/files   "Info.txt"文件名
            FileOutputStream fos = new FileOutputStream(file);// 创建输出流对象
            fos.write((username+"##"+password).getBytes());// 向文件中写入信息
            fos.close();  //关闭输出流对象
            return true;   //true保存成功
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;//false 保存失败
        }
    }
    /*
     * 获取保存的数据
     */
    public static Map<String, String> getSavedUserInfo(Context context){
        File file = new File(context.getFilesDir(),"Info.txt");
        try{
        FileInputStream fis = new FileInputStream(file);
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
        String str = br.readLine();//从这个缓存中读取一行的内容
        String[] infos = str.split("##");//split() 方法用于把一个字符串分割成字符串数组。
        Map<String, String> map = new HashMap<String, String>();// Map是个接口, HashMap是它的实现类。 这就是new 了一个对象
        map.put("username", infos[0]);
        map.put("password", infos[1]);
        return map;
    }catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }
    }
}

介绍一下xml的inputtype的值。
Android:inputType=”none”
android:inputType=”text”
android:inputType=”textCapCharacters” 字母大写
android:inputType=”textCapWords” 首字母大写
android:inputType=”textCapSentences” 仅第一个字母大写
android:inputType=”textAutoCorrect” 自动完成
android:inputType=”textAutoComplete” 自动完成
android:inputType=”textMultiLine” 多行输入
android:inputType=”textImeMultiLine” 输入法多行(如果支持)
android:inputType=”textNoSuggestions” 不提示
android:inputType=”textUri” 网址
android:inputType=”textEmailAddress” 电子邮件地址
android:inputType=”textEmailSubject” 邮件主题
android:inputType=”textShortMessage” 短讯
android:inputType=”textLongMessage” 长信息
android:inputType=”textPersonName” 人名
android:inputType=”textPostalAddress” 地址
android:inputType=”textPassword” 密码
android:inputType=”textVisiblePassword” 可见密码
android:inputType=”textWebEditText” 作为网页表单的文本
android:inputType=”textFilter” 文本筛选过滤
android:inputType=”textPhonetic” 拼音输入
android:password=”true” 设置只能输入密码
android:textColor = “#ff8c00” 字体颜色
android:textSize=”20dip” 大小
android:capitalize = “characters” 以大写字母写
android:textAlign=”center” EditText没有这个属性,但TextView有 android:textColorHighlight=”#cccccc” 被选中文字的底色,默认为蓝色
android:textColorHint=”#ffff00” 设置提示信息文字的颜色,默认为灰色
android:textScaleX=”1.5” 控制字与字之间的间距
android:typeface=”monospace” 字型,normal, sans, serif, monospace
android:background=”@null” 空间背景,这里没有,指透明
android:layout_weight=”1” 权重,控制控件之间的地位,在控制控件显示的大小时蛮有用的。
通过EditText的layout xml文件中的相关属性来实现:
1. 密码框属性 android:password=”true” 这条可以让EditText显示的内容自动为星号,输入时内容会在1秒内变成*字样。
2. 纯数字 android:numeric=”true” 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入
3. 仅允许 android:capitalize=”cwj1987” 这样仅允许接受输入cwj1987,一般用于密码验证 下面是一些扩展的风格属性
android:editable=”false” 设置EditText不可编辑
android:singleLine=”true” 强制输入的内容在单行
android:ellipsize=”end” 自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值