android 登陆案例_sd卡

时间:2023-03-08 21:26:51

代码:

<?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代码

 package com.itheima.login;

 import java.io.File;
import java.util.Map; import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast; import com.itheima.login.util.UserInfoUtil;
import com.itheima.login_sdcard.R; public class MainActivity extends Activity implements OnClickListener{ private EditText et_username;
private EditText et_password;
private CheckBox cb_rem;
private Button bt_login;
private Context mContext; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
et_username = (EditText) findViewById(R.id.et_username);
et_password = (EditText) findViewById(R.id.et_password);
cb_rem = (CheckBox) findViewById(R.id.cb_rem);
bt_login = (Button) findViewById(R.id.bt_login);
//b.设置按钮的点击事件
bt_login.setOnClickListener(this); //f.回显用户名密码 ??
Map<String, String> map = UserInfoUtil.getUserInfo(mContext);//获取用户名密码
if(map != null){
String username = map.get("username");
String password = map.get("password");
et_username.setText(username);//设置用户名
et_password.setText(password);
cb_rem.setChecked(true);//设置复选框选中状态
} } @SuppressLint("NewApi")
private void login(){ //c.在onclick方法中,获取用户输入的用户名密码和是否记住密码 String username = et_username.getText().toString().trim();
String password = et_password.getText().toString().trim();
boolean isrem = cb_rem.isChecked();
//d.判断用户名密码是否为空,不为空请求服务器(省略,默认请求成功)
if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){
Toast.makeText(mContext, "用户名密码不能为空", Toast.LENGTH_SHORT).show();
return ;
} //请求服务器,后面讲。。。。。。。。。。 //e.判断是否记住密码,如果记住,将用户名密码保存本地。????
if(isrem){ //判断Sdcard状态是否正常
if(!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)){
//sdcard状态是没有挂载的情况
Toast.makeText(mContext, "sdcard不存在或未挂载", Toast.LENGTH_SHORT).show();
return ;
} //判断sdcard存储空间是否满足文件的存储
File sdcard_filedir = Environment.getExternalStorageDirectory();//得到sdcard的目录作为一个文件对象
long usableSpace = sdcard_filedir.getUsableSpace();//获取文件目录对象剩余空间
long totalSpace = sdcard_filedir.getTotalSpace();
//将一个long类型的文件大小格式化成用户可以看懂的M,G字符串
String usableSpace_str = Formatter.formatFileSize(mContext, usableSpace);
String totalSpace_str = Formatter.formatFileSize(mContext, totalSpace);
if(usableSpace < 1024 * 1024 * 200){//判断剩余空间是否小于200M
Toast.makeText(mContext, "sdcard剩余空间不足,无法满足下载;剩余空间为:"+usableSpace_str, Toast.LENGTH_SHORT).show();
return ;
} boolean result = UserInfoUtil.saveUserInfo(mContext,username,password);
if(result){
Toast.makeText(mContext, "用户名密码保存成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(mContext, "用户名密码保存失败", Toast.LENGTH_SHORT).show();
} }else{
Toast.makeText(mContext, "无需保存", Toast.LENGTH_SHORT).show();
} } @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_login:
login();
break; default:
break;
}
} }

里面包的代码:

 package com.itheima.login.util;

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map; import android.content.Context;
import android.os.Environment; public class UserInfoUtil {
//保存用户名密码
public static boolean saveUserInfo(Context context,String username, String password) { try{
String userinfo = username + "##"+ password;//封装用户名密码
// String path = "/mnt/sdcard/";//指定保存的路径
//通过Environment获取sdcard的目录
String path = Environment.getExternalStorageDirectory().getPath(); System.out.println("...............:"+path);
File file = new File(path,"userinfo.txt");//创建file
FileOutputStream fileOutputStream = new FileOutputStream(file);//创建文件写入流
fileOutputStream.write(userinfo.getBytes());//将用户名密码写入文件
fileOutputStream.close();
return true;
}catch (Exception e) {
e.printStackTrace();
} return false;
} //获取用户名密码
public static Map<String ,String> getUserInfo(Context context){ try{
//通过Environment获取sdcard的目录
String path = Environment.getExternalStorageDirectory().getPath(); System.out.println("...............:"+path);
File file = new File(path,"userinfo.txt");//创建file
FileInputStream fileInputStream = new FileInputStream(file);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
//读取一行中包含用户密码,需要解析
String readLine = bufferedReader.readLine();
String[] split = readLine.split("##");
HashMap<String, String> hashMap = new HashMap<String ,String>();
hashMap.put("username", split[0]);
hashMap.put("password", split[1]);
bufferedReader.close();
fileInputStream.close();
return hashMap; }catch (Exception e) {
e.printStackTrace();
}
return null; } }

*在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);

*/