zoukankan      html  css  js  c++  java
  • 8.Android-简单的登录案例编写

    本章来学习登录案例,由于还未学习自定义控件外观,所以ui界面先用最简单的,并保存登录账号密码到data/data/包名/files

     

    1.学习之前需要掌握的Context类(通过Context来往APK包所在目录下读写登录信息配置文件)

    Context:可以理解为对APK的工具管家,通过Context可以访问当前应用相关的全局信息(系统资源)、 也可以发送广播、访问全局包信息、开启另外的activity、

    1.1 如何获取Context

    通过MainActivity.this获取

     

    1.2 本章要用的Context常用的方法有:

    FileOutputStream openFileOutput (String name, int mode);
    //将数据存储到/data/data/<package  name>/files/nam文件里, 注意这里指定的name文件名不可以包含路径
    // mode:可以填入MODE_PRIVATE(文件只能由调用应用程序访问)、MODE_APPEND(追加内容模式)、MODE_WORLD_READABLE(文件支持所有人可读)、MODE_WORLD_WRITEABLE(文件支持所有人可写)
    
    FileInputStream openFileInput (String name)
    //和openFileOutput()对应,该方法用于读取/data/data/<package  name>/files/nam文件.

    界面如下所示:

    2.activity_main.xml如下所示

    <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    <EditText android:id="@+id/et_user" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入账号" />
    <EditText android:id="@+id/et_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:hint="请输入密码" android:layout_below="@id/et_user" />
    <CheckBox android:id="@+id/cb_save" android:layout_below="@id/et_password" android:layout_alignParentLeft="true" android:layout_marginTop="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存密码" /> <Button android:id="@+id/bt_login" android:layout_below="@id/et_password" android:layout_alignParentRight="true" android:layout_alignBaseline="@+id/cb_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录" /> </RelativeLayout>

    3.Utils.java如下(用来读写保存用户登录的文件)

    package com.example.login.utils;
    
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    import android.content.Context;
    import android.util.Log;
    
    public class Utils {
        
        private boolean saveCheckd;
        private String name;
        private String pwd;
        
        
        
        public boolean isSaveCheckd() {
            return saveCheckd;
        }
    
        public void setSaveCheckd(boolean saveCheckd) {
            this.saveCheckd = saveCheckd;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        public static boolean saveInfo(Context context,Utils utils){
            
            String info = String.valueOf(utils.saveCheckd)+"##"+utils.name+"##"+utils.pwd;
            String pwdstr = utils.pwd==null?"true":"false";
            
            FileOutputStream fileOutput;
            try {
                fileOutput = context.openFileOutput("info.txt", Context.MODE_PRIVATE);   //打开要写的文件
                fileOutput.write(info.getBytes());
                fileOutput.close();
                return true;
                
            }catch (IOException e) {
        
                e.printStackTrace();
                return false;
            }
        }
        
        public static Utils getInfo(Context context){
            
            try {
                FileInputStream fis = context.openFileInput("info.txt");     //打开要读的文件
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));   
                String[] list =br.readLine().split("##");
                
                
                Log.v("utils", "getInfo:"+String.valueOf(list.length));
                Utils utils = new Utils();
    
                utils.setSaveCheckd("true".equals(list[0]));
                utils.setName(list[1]);
                utils.setPwd(list[2]);        
                return utils;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            } 
            
        }
        
        
    }

    4.MainActivity.java如下所示:

    package com.example.login;
    
    import com.example.login.utils.Utils;
    import android.os.Bundle;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.Menu;
    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;
    
    public class MainActivity extends Activity  implements  OnClickListener{
        private Button bt_login;
        private EditText et_user;
        private EditText et_password;
        private CheckBox cb_save;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //获取控件
            et_user = (EditText)findViewById(R.id.et_user);
            et_password = (EditText)findViewById(R.id.et_password);
            cb_save = (CheckBox)findViewById(R.id.cb_save);
            bt_login = (Button)findViewById(R.id.bt_login);
    
            bt_login.setOnClickListener(this);
            //判断之前的配置文件里是否保存有账号密码
            Utils utils = Utils.getInfo(MainActivity.this);
            if(utils!=null)     //文件有内容?
            {
            et_user.setText(utils.getName());
            if(utils.isSaveCheckd())   //保存了密码?
            {
                 cb_save.setChecked(true);
                 et_password.setText(utils.getPwd());
            }
           }
        }
    
       
        @Override
        public void onClick(View v) {
    
        //1.判断账号密码是否为空
        //2.判断是否需要保存账号密码
        //3.登录完成
        String user = et_user.getText().toString();
        String pwd = et_password.getText().toString();
        if(TextUtils.isEmpty(user)||TextUtils.isEmpty(pwd)){
            //提示
            Toast.makeText(MainActivity.this, "账号/密码为空", Toast.LENGTH_SHORT).show();
            return;
        }else{
            Utils utils = new Utils();
            utils.setSaveCheckd(cb_save.isChecked());      //更新checkbox标志
            utils.setName(user);                           //更新登录账号
    
            if(cb_save.isChecked()){
                 //保存密码
                 utils.setPwd(pwd);
                 Utils.saveInfo(MainActivity.this, utils);
            }else{
                 Utils.saveInfo(MainActivity.this, utils);
            }
            Toast.makeText(MainActivity.this,"登录成功", Toast.LENGTH_SHORT).show();
        }
       }
    
       
        @Override
    
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    }
  • 相关阅读:
    Flink实例(117):FLINK-SQL应用场景(16)以upsert的方式读写Kafka数据——以Flink1.12为例(二)
    Flink实例(116):FLINK-SQL应用场景(15)以upsert的方式读写Kafka数据——以Flink1.12为例(一)
    数据挖掘实践(17):基础理论(十七)数据挖掘基础(四)模型解释
    数据挖掘实践(16):基础理论(十六)数据挖掘基础(三)特征工程(二)性能度量与评估方法
    rust 可变变量
    Rust学习(32):智能指针-Rc<T>
    rust 高级编程
    rust 所有权
    rust智能指针
    Anbox:容器中的 Android,anboxandroid
  • 原文地址:https://www.cnblogs.com/lifexy/p/12164162.html
Copyright © 2011-2022 走看看