保存文件到手机内存

来源:互联网 发布:js 截取字符串后几位 编辑:程序博客网 时间:2024/05/10 21:27

这里写图片描述
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” 自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时

原创粉丝点击