Android简单登陆页面

布局:

线性布局+相对布局

日志打印:

利用LogCat和System.out.println打印观察。

Onclick事件是采用过的第四种:

在配置文件中给Button添加点击时间

涉及知识:

通过上线文context获得文件的路径和缓存路径,保存文件

布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.loginUI.MainActivity"
    tools:ignore="MergeRootFrame"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_plInputName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/plInputName" />

    <EditText
        android:id="@+id/et_userName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName" >
        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/tv_plInputPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/plInputPassword" />

    <EditText
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPassword"/>

    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
       <CheckBox
        android:checked="true"
        android:id="@+id/cb_rmPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/rmPassword" />

       <Button
           android:onClick="login"
           android:id="@+id/btn_login"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentRight="true"
           android:layout_alignParentTop="true"
           android:layout_marginRight="35dp"
           android:text="@string/login" />

    </RelativeLayout>

</LinearLayout>

MainActivity代码:

package com.example.loginUI;

import java.util.Map;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import com.example.service.LoginService;

public class MainActivity extends ActionBarActivity {

    //日志记录Tag
    private String TAG = "MainActivity";

    /** 用户名 */
    private EditText etUserName;

    /** 密码 */
    private EditText etPassword;

    /** 登陆按钮 */
    private Button btnLogin;

    /** 记住密码按钮 */
    private CheckBox cbx;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得控件
        etUserName = (EditText)findViewById(R.id.et_userName);
        etPassword = (EditText)findViewById(R.id.et_password);
        btnLogin = (Button)findViewById(R.id.btn_login);
        cbx = (CheckBox)findViewById(R.id.cb_rmPassword);

        Map<String, String> result =  (new LoginService().getUserNameAndPassword(this));
        if (null != result ) {
            etUserName.setText(result.get("userName"));
            etPassword.setText(result.get("password"));
        }
    }

    public void login(View view) {
        //日志打印
        Log.i(TAG, "开始登陆验证");

        String userName = etUserName.getText().toString();
        String password = etPassword.getText().toString();
        //非空判断给出吐司提示
        if (TextUtils.equals(userName.trim(), "") || TextUtils.equals(password.trim(), "")) {
            Toast.makeText(this, "用户名/密码不能为空", Toast.LENGTH_SHORT).show();
            return ;
        }
        //是否保存密码
        if (cbx.isChecked()) {
            //new LoginService().saveUserNameAndPassword(userName, password);
            new LoginService().saveUserNameAndPassword(this, userName, password);
        }
        if("zz".equals(userName) && "11".equals(password)) {
            Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "登陆失败", Toast.LENGTH_SHORT).show();
        }
        Log.i(TAG, "登陆验证完成");

    }

}

保存数据以及读数据的代码:

package com.example.service;

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.List;
import java.util.Map;

import android.content.Context;
import android.util.Log;

public class LoginService {

    private String TAG = "loginService";

    /**
     * 保存用户名密码, 这样的方式不灵活, 如果我们改了工程的包名的话, 这里就变成了我们的工程往另一工程写数据了, 这是不允许的
     * @param userName
     * @param password
     * @return
     */
    public boolean saveUserNameAndPassword(String userName, String password) {
        Log.i(TAG, "开始保存用户名密码");

        File file = new File("/data/data/com.example.loginUI/info.txt");
        FileOutputStream outputStream;
        try {
            outputStream = new FileOutputStream(file);
            outputStream.write((userName+"#"+password).getBytes());
            outputStream.close();
        } catch (Exception e) {
            Log.e(TAG, "保存用户名密码出现异常");
            return false;
        }
        return true;
    }

    /**
     * 保存用户名密码, 通过上下文动态的改变文件路径
     * @param context
     * @param userName
     * @param password
     * @return
     */
    public boolean saveUserNameAndPassword(Context context, String userName, String password) {
        Log.i(TAG, "开始保存用户名密码");

        File file = new File(context.getFilesDir(), "info.txt"); // == File file = new File("/data/data/com.example.loginUI/files/info.txt");

        //File file = new File(context.getCacheDir(), "info.txt"); // /data/data/com.example.loginUI/cache/info.txt  放进缓存,不要放太大的东西
        FileOutputStream outputStream;
        try {
            outputStream = new FileOutputStream(file);
            outputStream.write((userName+"#"+password).getBytes());
            outputStream.close();
        } catch (Exception e) {
            Log.e(TAG, "保存用户名密码出现异常");
            return false;
        }
        return true;
    }

    public Map<String, String> getUserNameAndPassword(Context context) {
        Map<String, String> result = new HashMap<String, String>();
        File file = new File(context.getFilesDir(), "info.txt");
        FileInputStream fis;
        try {
            fis = new FileInputStream(file);
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            String[] lists = br.readLine().split("#");
            Log.i(TAG, "要保存的用户名="+lists[0]+": 密码="+lists[1]);
            result.put("userName", lists[0]);
            result.put("password", lists[1]);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

}
 

Android简单登陆页面,布布扣,bubuko.com

时间: 2024-12-19 20:47:49

Android简单登陆页面的相关文章

android简单登陆和注册功能实现+SQLite数据库学习

最近初学android,做了实验室老师给的基本任务,就是简单的登陆和注册,并能通过SQLite实现登陆,SQlLite是嵌入在安卓设备中的 好了下面是主要代码: 数据库的建立: 这里我只是建立了一个用简单的存储用户名和密码的表单 MyDBHelper.java public class MyDBHelper extends SQLiteOpenHelper { public static final String CREATE_USERDATA="create table userData(&q

Android笔记-4-实现登陆页面并跳转和简单的注册页面

实现登陆页面并跳转和简单的注册页面 首先我们来看看布局的xml代码 login.xml <span style="font-family:Arial;font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

小KING教你做android项目(二)---实现登陆页面并跳转和简单的注册页面

原文:http://blog.csdn.net/jkingcl/article/details/10989773 今天我们主要来介绍登陆页面的实现,主要讲解的就是涉及到的布局,以及简单的跳转需要用到的代码. 首先我们来看看布局的xml代码 login.xml [html] view plaincopy <span style="font-family:Arial;font-size:18px;"><?xml version="1.0" encodi

.Net程序员玩转Android开发---(3)登陆页面布局

这一节我们来看看登陆页面怎样布局,对于刚接触到Android开发的童鞋来说,Android的布局感觉比较棘手,需要结合各种属性进行设置,接下来我们由点入面来 了解安卓中页面怎样布局,登陆页面很简单,两个文本框和一个按钮,页面效果如下:

Android之十一实现登陆页面分析

Android之十一实现登陆页面分析 二.登录界面的布局分析 1.login.xml Step1:首先建立drawable 文件夹,创建logintopbg_roundcorner.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid a

python编写简单的html登陆页面(3)

1  在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将静态分配数据,建立表格,存放学生信息 2  加载到静态数据 3  html的编写直接在表格里添加一组数据就行了 4  VS Code上面跟前面的后台类似,添加一个content再链接到html就可以了 @app.route('/content')def content(): return render_template('content.html') return 'content.....'

python编写简单的html登陆页面(2)

1  在python编写简单的html登陆页面(1)的基础上在延伸一下: 可以将动态分配数据,实现页面跳转功能: 2  跳转到新的页面:return render_template('home1.html') 3  后台代码如下 4  前端html:

html+js实现简单的登陆页面

初学web自动化,学习简单的前端知识还是很有必要的: 今天我们利用html实现一个简单的登陆页面,并利用js提取用户名和密码,在alert弹窗中显示出来 实现的功能: 1.实现重置按钮的功能,点击重置按钮,能清除你填写的数据 2.填写用户名,密码,点击登录,获取到用户名和密码通过alert提示框展示出来. 页面如图: 代码如下: <!DOCTYPE html><html> <head> <title>登陆.html</title> </he

python编写简单的html登陆页面(1)

1  html 打开调式效果如下 2  用python后台编写 # coding:utf-8# 从同一个位置导入多个工具,# 这些工具之间可以用逗号隔开,同时导入# render_template渲染母版from flask import Flask,render_template app=Flask(__name__)# 装饰器,路由用来封装链接,同时返回数据@app.route('/index')def index_xxx(): # 导入html # 需要在桌面建立一个templates文件