android 登陆案例_sd卡

代码:

<?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);

*/

时间: 2024-10-05 13:40:01

android 登陆案例_sd卡的相关文章

android 登陆案例_最终版本 sharedpreference

xml  与之前的登陆案例相同 java代码: 1 package com.itheima.login; 2 3 import java.util.Map; 4 5 import com.itheima.login.util.UserInfoUtil; 6 import com.itheima.login_shared.R; 7 8 import android.app.Activity; 9 import android.content.Context; 10 import android.o

广播接收者案例_sd卡状态监听

(1)定义广播接收者 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class SdcardReceiver extends BroadcastReceiver { //当sd卡被卸载 或者被挂载上来的时候 会执行 @Override public void onReceive(Context context, Inte

android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例

09_android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例

09_android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例

根据08_android入门_android-async-http开源项目介绍及使用方法的介绍,我们通过最常见的登陆案例进行介绍android-async-http开源项目中有关类的使用.希望对你学习android-async-http开源项目有所帮助. 1.继续采用03_android入门_采用RelativeLayout实现登陆界面为该案例的布局文件 2.服务器端的代码采用04_android入门_采用HttpURLConnection的GET方式实现登陆案例中的服务器代码片段(5.关于服务

07_android入门_采用HttpClient的POST方式、GET方式分别实现登陆案例

1.简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议. 2.功能介绍 以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页. (1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等) (2)支持自动转向 (3)支持 HTTPS 协议 (4)支持代理服务器等 3

09_android入门_採用android-async-http开源项目的GET方式或POST方式实现登陆案例

依据08_android入门_android-async-http开源项目介绍及用法的介绍,我们通过最常见的登陆案例进行介绍android-async-http开源项目中有关类的使用.希望对你学习android-async-http开源项目有所帮助. 1.继续採用03_android入门_採用RelativeLayout实现登陆界面为该案例的布局文件 2.server端的代码採用04_android入门_採用HttpURLConnection的GET方式实现登陆案例中的server代码片段(5.

Android画板案例

画板案例: 步骤: 步骤一:声明一些全局上使用的变量: //接收布局文件上的图片显示控件 private ImageViewiv; //声明一个可以用来编辑的bitmap private BitmapbaseBitmap; //画布的声明 private Canvascanvas; //画笔的声明 private Paintpaint; 步骤二:初始化声明的变量并设置一些属性: // 获取布局文件上的图片控件 iv = (ImageView) findViewById(R.id.iv); //

04_android入门_采用HttpURLConnection的GET方式实现登陆案例

1.概述 每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络.请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例关联的网络资源,但对共享的持久连接没有任何影响.如果在调用 disconnect() 时持久连接空闲,则可能关闭基础套接字. 2.在03_android入门_采用RelativeLayout实现登陆界面效果的案例

07_android入门_採用HttpClient的POST方式、GET方式分别实现登陆案例

1.简单介绍 HttpClient 是 Apache Jakarta Common 下的子项目,能够用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,而且它支持 HTTP 协议最新的版本号和建议. 2.功能介绍 ? ? 下面列出的是 HttpClient 提供的基本的功能,要知道很多其它具体的功能能够參见 HttpClient 的主页. (1)实现了全部 HTTP 的方法(GET,POST,PUT,HEAD 等) (2)支持自己主动转向 (3)支持 HTTPS 协议 (4