专栏首页Linux驱动8.Android-简单的登录案例编写

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;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 12.Android-SQLiteOpenHelper使用

    为了在本地创建SQLite数据库,我们需要创建一个SQLiteOpenHelper的子类,这里取名的为MyOpenHelper类,然后还要写构造方法来初始化父类...

    张诺谦
  • 6.Android-五大布局

    如果要想设置两个控件的比例大小,则设置android:layout_weight(不是android:layout_width),值越大则比例越大(垂直布局则设...

    张诺谦
  • 13.Android-ListView使用、BaseAdapter/ArrayAdapter/SimpleAdapter适配器使用

    ListView 是 Android 系统为我们提供的一种列表显示的一种控件,使用它可以用来显示我们常见的列表形式。继承自抽象类 AdapterView。继承图...

    张诺谦
  • Android实现类似execel的表格 能回显并能修改表格内容的方法

    以上这篇Android实现类似execel的表格 能回显并能修改表格内容的方法就是小编分享给大家的全部内容了,希望能给大家一个参考。

    砸漏
  • 3.PopupWindow 、拍照、裁剪

    六月的雨
  • [android] post请求接口demo测试代码

    陶士涵
  • 安卓 —— 图灵机器人+讯飞语音设计实现

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

    泥豆芽儿 MT
  • 保存手写签名

    Android 提供了很多丰富、实用而且很有特色的功能。比如,语音识别、手写签名等等。本篇就为你介绍如何在android上进行个性化的手写签名。 首先大致说...

    xiangzhihong
  • Android自定义文件路径选择器

    文中涉及到文件名称排序,固定根目录以及返回上一层在上面,方便选择等。根据文件后缀,筛选文件还没做。先看效果。

    砸漏
  • Android实现带图标的列表对话框

    根据之前学的Android对话框技术,来实现下面一个效果:界面有一个”打开设置对话框”按钮,将弹出选择项目的对话框,单击任意列表项,都将关闭该对话框,并通过消息...

    砸漏

扫码关注云+社区

领取腾讯云代金券