码迷,mamicode.com
首页 > 移动开发 > 详细

android 登陆案例_sd卡

时间:2016-07-19 16:58:37      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

代码:

<?xml version="1.0"?>

-<LinearLayout android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">

<EditText android:id="@+id/et_username" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="@string/input_username"/>

<EditText android:id="@+id/et_password" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="@string/input_password" android:inputType="textPassword" android:layout_marginBottom="10dp" android:layout_marginTop="10dp"/>


-<RelativeLayout android:layout_height="wrap_content" android:layout_width="fill_parent">

<CheckBox android:id="@+id/cb_rem" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/rem_password" android:layout_alignParentLeft="true" android:layout_centerVertical="true"/>

<Button android:id="@+id/bt_login" android:paddingRight="50dp" android:paddingLeft="50dp" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/login" android:layout_centerVertical="true" android:layout_alignParentRight="true"/>

</RelativeLayout>

</LinearLayout>

 

java代码

 

  1 package com.itheima.login;
  2 
  3 import java.io.File;
  4 import java.util.Map;
  5 
  6 import android.annotation.SuppressLint;
  7 import android.app.Activity;
  8 import android.content.Context;
  9 import android.os.Build;
 10 import android.os.Bundle;
 11 import android.os.Environment;
 12 import android.text.TextUtils;
 13 import android.text.format.Formatter;
 14 import android.view.View;
 15 import android.view.View.OnClickListener;
 16 import android.widget.Button;
 17 import android.widget.CheckBox;
 18 import android.widget.EditText;
 19 import android.widget.Toast;
 20 
 21 import com.itheima.login.util.UserInfoUtil;
 22 import com.itheima.login_sdcard.R;
 23 
 24 public class MainActivity extends Activity implements OnClickListener{
 25 
 26     private EditText et_username;
 27     private EditText et_password;
 28     private CheckBox cb_rem;
 29     private Button bt_login;
 30     private Context mContext;
 31 
 32     @Override
 33     protected void onCreate(Bundle savedInstanceState) {
 34         super.onCreate(savedInstanceState);
 35         setContentView(R.layout.activity_main);
 36         mContext = this;
 37         et_username = (EditText) findViewById(R.id.et_username);
 38         et_password = (EditText) findViewById(R.id.et_password);
 39         cb_rem = (CheckBox) findViewById(R.id.cb_rem);
 40         bt_login = (Button) findViewById(R.id.bt_login);
 41         //b.设置按钮的点击事件
 42         bt_login.setOnClickListener(this);
 43 
 44         
 45         //f.回显用户名密码 ??
 46         Map<String, String> map = UserInfoUtil.getUserInfo(mContext);//获取用户名密码
 47         if(map != null){
 48             String username = map.get("username");
 49             String password = map.get("password");
 50             et_username.setText(username);//设置用户名
 51             et_password.setText(password);
 52             cb_rem.setChecked(true);//设置复选框选中状态
 53         }
 54 
 55     }
 56 
 57     @SuppressLint("NewApi")
 58     private void login(){
 59 
 60         //c.在onclick方法中,获取用户输入的用户名密码和是否记住密码
 61 
 62             String username = et_username.getText().toString().trim();
 63             String password = et_password.getText().toString().trim();
 64             boolean isrem = cb_rem.isChecked();
 65         //d.判断用户名密码是否为空,不为空请求服务器(省略,默认请求成功)
 66             if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){
 67                 Toast.makeText(mContext, "用户名密码不能为空", Toast.LENGTH_SHORT).show();
 68                 return ;
 69             }
 70             
 71         //请求服务器,后面讲。。。。。。。。。。
 72                 
 73         //e.判断是否记住密码,如果记住,将用户名密码保存本地。???? 
 74             if(isrem){
 75                 
 76                 //判断Sdcard状态是否正常
 77                 if(!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)){
 78                     //sdcard状态是没有挂载的情况
 79                     Toast.makeText(mContext, "sdcard不存在或未挂载", Toast.LENGTH_SHORT).show();
 80                     return ;
 81                 }
 82                 
 83                 
 84                 //判断sdcard存储空间是否满足文件的存储
 85                 File sdcard_filedir = Environment.getExternalStorageDirectory();//得到sdcard的目录作为一个文件对象
 86                 long usableSpace = sdcard_filedir.getUsableSpace();//获取文件目录对象剩余空间
 87                 long totalSpace = sdcard_filedir.getTotalSpace();
 88                 //将一个long类型的文件大小格式化成用户可以看懂的M,G字符串
 89                 String usableSpace_str = Formatter.formatFileSize(mContext, usableSpace);
 90                 String totalSpace_str = Formatter.formatFileSize(mContext, totalSpace);
 91                 if(usableSpace < 1024 * 1024 * 200){//判断剩余空间是否小于200M
 92                     Toast.makeText(mContext, "sdcard剩余空间不足,无法满足下载;剩余空间为:"+usableSpace_str, Toast.LENGTH_SHORT).show();
 93                     return ;    
 94                 }
 95                 
 96                 boolean result = UserInfoUtil.saveUserInfo(mContext,username,password);
 97                 if(result){
 98                     Toast.makeText(mContext, "用户名密码保存成功", Toast.LENGTH_SHORT).show();
 99                 }else{
100                     Toast.makeText(mContext, "用户名密码保存失败", Toast.LENGTH_SHORT).show();    
101                 }
102                 
103             }else{
104                 Toast.makeText(mContext, "无需保存", Toast.LENGTH_SHORT).show();
105             }
106 
107 
108 
109     }
110 
111     @Override
112     public void onClick(View v) {
113         switch (v.getId()) {
114         case R.id.bt_login:
115             login();
116             break;
117 
118         default:
119             break;
120         }
121     }
122 
123 
124 }

 

里面包的代码:

 1 package com.itheima.login.util;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileInputStream;
 6 import java.io.FileOutputStream;
 7 import java.io.InputStreamReader;
 8 import java.util.HashMap;
 9 import java.util.Map;
10 
11 import android.content.Context;
12 import android.os.Environment;
13 
14 public class UserInfoUtil {
15     //保存用户名密码
16     public static boolean saveUserInfo(Context context,String username, String password) {
17 
18         try{
19             String userinfo = username + "##"+ password;//封装用户名密码
20 //            String path = "/mnt/sdcard/";//指定保存的路径
21             //通过Environment获取sdcard的目录
22             String path = Environment.getExternalStorageDirectory().getPath();
23             
24             System.out.println("...............:"+path);
25             File file = new File(path,"userinfo.txt");//创建file
26             FileOutputStream fileOutputStream = new FileOutputStream(file);//创建文件写入流
27             fileOutputStream.write(userinfo.getBytes());//将用户名密码写入文件
28             fileOutputStream.close();
29             return true;
30         }catch (Exception e) {
31             e.printStackTrace();
32         }
33 
34         return false;
35     }
36     
37     //获取用户名密码
38     public static Map<String ,String> getUserInfo(Context context){
39         
40         try{
41             //通过Environment获取sdcard的目录
42             String path = Environment.getExternalStorageDirectory().getPath();
43             
44             System.out.println("...............:"+path);
45             File file = new File(path,"userinfo.txt");//创建file
46             FileInputStream fileInputStream = new FileInputStream(file);
47             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
48             //读取一行中包含用户密码,需要解析
49             String readLine = bufferedReader.readLine();
50             String[] split = readLine.split("##");
51             HashMap<String, String> hashMap = new HashMap<String ,String>();
52             hashMap.put("username", split[0]);
53             hashMap.put("password", split[1]);
54             bufferedReader.close();
55             fileInputStream.close();
56             return hashMap;
57             
58         }catch (Exception e) {
59             e.printStackTrace();
60         }
61         return null;
62         
63     }
64 
65 }

 

*在sd卡中存储   我的笔记
1.如何新赋值一个项目呢?
2.在res的string处修改app的名字
3.studio如何修改包名呢?eclipse在 android tools里面的Rename application package里面修改的
4.修改sd卡路径时,会报黄,怎么办,在清单里面修改用户权限
5.与上面一样,获得私有目录也是靠方法,但最后都要getpath()
6.可以考打印,知道是那个目录,真的是这个目录,打印看真实,还是很有用的
7.在开发文档搜,Evironment  ,会有这两个方法
8.我们还需要sd卡存不存在,如果不存在,就不需要弄了,也就是说,我们需要判断sd卡的状态
9.那我们在哪里添加sd卡状态的判断呢?
  我们用这个功能是保存数据,那么这个判断当然是在保存数据的前面判断了
  1.判断sd开的状态,用到equals方法,E.gES与那个EM里面的属性比较,相等。sd卡就登陆,就存在
  2.判断剩余空间是否满足存储
  3.调用其中一个方法时,可能要@加上新的注解
  4.1M1024*1024
  5.    //获得sd卡总空间的大小
        long total =  file.getTotalSpace();
        
        //转换数据大小的数据单位,让我们能看懂
        String totalSize = Formatter.formatFileSize(this, total);
        //获得sd卡剩余空间的大小
        long usable = file.getUsableSpace();
        
        String usableSize = Formatter.formatFileSize(this, usable);
*/
10.两种存储方法的优略
  1.私有路径,安全  缺:不能存太大的数据
  2.sd卡,只能不安全的数据,不能存密码  优点:多大都可以存

/*老师笔记
存储到SD卡(重点)

    异常信息:
    09-21 23:25:32.068: W/System.err(24718): java.io.FileNotFoundException: /storage/sdcard/info.txt: open failed: EACCES (Permission denied)
   步骤:

    1、    在SD卡上创建一个文件,

    2、创建一个输出流往sd卡上写数据
    String data = "dsfdsae";
            
            File file = new File(Environment.getExternalStorageDirectory(), "info.txt");
            
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(data.getBytes());
            
            fos.close();

    3、在清单文件中添加访问SD卡的权限
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   


#7.获取SD的大小及可用空间
    //获得sd卡的目录对象
        File file = Environment.getExternalStorageDirectory();
        
        //获得sd卡总空间的大小
        long total =  file.getTotalSpace();
        
        //转换数据大小的数据单位
        String totalSize = Formatter.formatFileSize(this, total);
        //获得sd卡剩余空间的大小
        long usable = file.getUsableSpace();
        
        String usableSize = Formatter.formatFileSize(this, usable);
        
        tv.setText(usableSize+"/"+totalSize);

*/




 

android 登陆案例_sd卡

标签:

原文地址:http://www.cnblogs.com/liangqiyuan/p/5685304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!