Android——Login用户登陆的设计实现

  我们生活中会遇到各种各样的登录界面,需要输入你的账号和密码,像登陆QQ呀,各种软件都需要这种设计,那我们今天来实现一下吧~~

首先,界面的设计如下:

  可以看出,我们需要两个可编辑文本框,用来输入用户名和密码,同时,我们要提示出要输入的类型,用hint来提示;我们需要一个checkbox来判断我们是否选择保存密码,还需要一个登陆button;由于整个线性布局是垂直的,因此两个可编辑文本框,一个checkbox,一个button在垂直方向上依次排列,这样不是很美观,因此我们需要再建立一个相对布局,使checkbox与button排列在一行。具体实现如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.administrator.login.login"
    tools:showIn="@layout/activity_login">

   <EditText
       android:id="@+id/mUserName"
       android:hint="用户名"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />

    <EditText
        android:layout_below="@+id/mUserName"
        android:id="@+id/mPassWord"
        android:hint="密码"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <CheckBox
            android:layout_centerVertical="true"
            android:id="@+id/mCheckBox"
            android:text="是否保存密码"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/mButton"
            android:text="登陆"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />

    </RelativeLayout>

</LinearLayout>

设计完界面之后,我们来实现Activity:
实现用户登录界面需要几个步骤:

1、因为Activity一启动就会调用onCreate()函数,因此在onCreate()函数中获取界面中的各个控件,通过findViewById()函数。

2、为button设置一个监听器,当点下button并勾选checkbox时mCheckbox.isChecked(),获取用户名与密码,通过输出流输出到内部存储的info.txt文件中,为了方便读取,我们设置##来分割用户名与密码。

3、不管有无勾选checkbox,只有点击了button,我们就生成吐司提示界面,参数依次为:上下文环境(即当前Activity),要输出的字符串以及输出时间(3s或5s)

4、保存密码功能实现的是当用户退出程序,再一次进入时,已显示出用户名与密码,我们通过readfrominfo()方法进行实现。

5、readfrominfo()中,为了方便对数据的操作,我们首先要把文件字节流转化成输入流再转化为字符流,这样我们就可以调用字符流的readline()函数(即实现按行读取),若文件有多行,则设置循环while(下一行不为空){执行readline()},这样我们就把info.txt中的信息读到了字符串中了,我们把字符串中按##分割的各部分存入字符串数组中,则数组[0]为用户名,数组[1]为密码。

6、因为我们在一进入软件就会执行onCreate()函数,所以在这里面我们就要调用readfrominfo()函数,但是,如果用户是第一次登陆,并没有生成info.txt,直接调用readfrominfo()函数肯定会出错,因此在readfrominfo()函数中,我们要进行判断,判断info.txt文件是否存在file.exits()

代码如下:

package com.administrator.login;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class login extends AppCompatActivity {
    private EditText mUsername;
    private EditText mPassWord;
    String username=null;
    String password=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Button mButton=(Button)findViewById(R.id.mButton);
        mUsername=(EditText)findViewById(R.id.mUserName);
        mPassWord=(EditText)findViewById(R.id.mPassWord);
        final CheckBox mCheckbox=(CheckBox)findViewById(R.id.mCheckBox);

        readfrominfo();     //调用读内部存储函数

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mCheckbox.isChecked()){
                    username=mUsername.getText().toString();
                    password=mPassWord.getText().toString();
                    File file = new File(getFilesDir(),"info.txt");     //写内部存储到info.txt文件
                    FileOutputStream fos= null;     //创建输出流
                    try {
                        fos = new FileOutputStream(file);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                    try {
                        fos.write((username+"##"+password).getBytes());     //将username##password按位写入文件中
                        fos.close();                                           //关闭流
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                Toast.makeText(login.this,"登陆成功",Toast.LENGTH_SHORT).show();        //吐司界面,参数依次为提示发出Activity,提示内容,提示时长
            }
        });

    }

    //读内部存储函数
    public void readfrominfo(){
        File file = new File(getFilesDir(),"info.txt");
        if(file.exists()){
            BufferedReader br= null;
            try {
                br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));      //将字节流转化为输入流然后转化为字符流
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            String str = null;
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            String [] up= str.split("##");      //将字符串按##分割的部分依次存入字符串型数组up中

            mUsername.setText(up[0]);       //填写username与password
            mPassWord.setText(up[1]);
        }
    }
}

输出结果:

  

时间: 07-19

Android——Login用户登陆的设计实现的相关文章

(一)Android OkHttp 用户登陆demo

android开发中网络通讯必不可少,目前使用率较高的http框架有Okhttp.nohttp.volley等等, 下面做一个用户登陆的demo,说明一下Okhttp的用法,废话不多说,看代码. LoginActivity.java 1 package com.junyi.shangqifixture; 2 3 import java.io.IOException; 4 5 import android.app.Activity; 6 import android.content.Intent;

&lt;Android考证之实训项目三&gt;用户登录对话框设计

项目截图 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://sche

[PHP]用户登陆中间件

Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参见这里:http://www.cnblogs.com/HD/p/4569858.html 这里的例子是基于如上文章后所扩展的. 一.新建一个用户登陆模型 app\models\Login.php <?php namespace App\models; use App\models\BaseModel; /

Android——用户登陆及用户名和密码的保存

Android——用户登陆及用户名和密码的保存 在之前的学习过程中已经将Android学习完了,但是在后面将近一年的时间里都没有进行过Android开发,所以对Android的所有的知识点又有点忘记了,因此才会继续的学习Android,做出这个学习笔记.另外:由于在暑假的时候要开发Android项目,所以对于这些Android知识点也都要熟练的掌握. 目录 一.Android下的Junit测试 二.登陆记录密码界面设计 三.采用rom保存用户数据 一.Android下的Junit测试 在实际开发

QML与C++交互:登陆界面设计

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.   环境: 主机:WIN7 开发环境:Qt5.2.1 说明: QML设计前台界面,C++后台负责逻辑 效果图: 源代码:   前台qml文件 login.qml [javascript] view plain copy /********************************************************************* *                    

android 学习过程中登陆失效的个人理解

今天在学习的过程中,要做登陆失效的功能,所以就找了些资料,好好看了一下,研究了一番,慢慢的做出来了! 比如:你在一个手机端登陆了账号,在另外的一个手机端也登陆了账号,此时,前一个手机端的账号会提示登陆失效. 意思是只能存在一个账号,这个其实不是很难. 每次登陆的时候会存在一个Token,每次登陆的Token是不一样的! 下面贴一下前端的一些小代码: 在异步网络请求里面判断返回的异常是否是登陆失效: @Override protected void onPostExecute(BusinessRe

android asmack 注册 登陆 聊天 多人聊天室 文件传输

XMPP协议简介 XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML的协议,目的是为了解决及时通信标准而提出来的,最早是在Jabber上实现的.它继承了在XML环境中灵活的发展性.因此,基于XMPP的应用具有超强的可扩展性.并且XML很易穿过防火墙,所以用XMPP构建的应用不易受到防火墙的阻碍.利用XMPP作为通用的传输机制,不同组织内的不同应用都可以进行有效的通信. 这篇文章有基本的介绍,http://bl

大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session

原文:大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session 事情是这样的,我们最近开了一个APP,主要使用xamarin做了一个登陆,它与服务器API进行数据通讯,当用户名密码正确去,跳转到新的activity,并在webview控件中打开服务端的Html5页面,而h5页面有些需要进行授权才能访问,如用户中心,我的订单,我的商品等等,而我们的登陆是在原生的activity里实现的,在登陆成功后服务端会向它分配一个SessionID,并存储在客户端,以做为

PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/phpcms_v9/index.php?m=member&c=index&a=login dosubmit=1&username=phpcms&password=123456%26username%3d%2527%2bunion%2bselect%2b%25272%2