zoukankan      html  css  js  c++  java
  • 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);

    */




  • 相关阅读:
    python requests 上传excel数据流
    No module named 'requests_toolbelt'
    code
    pytest 打印调试信息
    python3 获取日期时间
    Java单元测试之JUnit篇
    The import junit cannot be resolved解决问题
    什么是索引
    python3 ini文件读写
    js 测试题
  • 原文地址:https://www.cnblogs.com/liangqiyuan/p/5685304.html
Copyright © 2011-2022 走看看