布局:

线性布局+相对布局

日志打印:

利用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简单登陆页面的更多相关文章

  1. Android 简单登陆 涉及 Button CheckBox TextView EditText简单应用

    GitHub地址:https://github.com/1165863642/LoginDemo 直接贴代码<?xml version="1.0" encoding=&quo ...

  2. Android 使用 intent 实现简单登陆页面

    前言 第一个 Android 程序,应该有些纪念的意义吧~ 主页面布局 给 Button 添加响应函数:android:onClick="login" public void lo ...

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

    最近初学android,做了实验室老师给的基本任务,就是简单的登陆和注册,并能通过SQLite实现登陆,SQlLite是嵌入在安卓设备中的 好了下面是主要代码: 数据库的建立: 这里我只是建立了一个用 ...

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

    实现登陆页面并跳转和简单的注册页面   首先我们来看看布局的xml代码 login.xml <span style="font-family:Arial;font-size:18px; ...

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

    原文:http://blog.csdn.net/jkingcl/article/details/10989773       今天我们主要来介绍登陆页面的实现,主要讲解的就是涉及到的布局,以及简单的跳 ...

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

    这一节我们来看看登陆页面如何布局.对于刚接触到Android开发的童鞋来说.Android的布局感觉比較棘手.须要结合各种属性进行设置,接下来我们由点入面来 了解安卓中页面如何布局,登陆页面非常eas ...

  7. tkinter做一个简单的登陆页面

    做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...

  8. tkinter做一个简单的登陆页面(十六)

    做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...

  9. python编写简单的html登陆页面(4)

    python编写简单的html登陆页面(4)   1  在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将动态态分配数据,建立表格,存放学生信息 2 实现的效果如下: 3  动 ...

随机推荐

  1. redis监控状态

    Redis介绍 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表.哈希.集合和有序集合5种.支持在服务器端计算集合 ...

  2. Spring事务注解@Transactional回滚问题

    Spring配置文件,声明事务时,如果rollback-for属性没有指定异常或者默认不写:经测试事务只回滚运行时异常(RuntimeException)和错误(Error). <!-- 配置事 ...

  3. linux信号机制 - 用户堆栈和内核堆栈的变化【转】

    转自:http://itindex.net/detail/16418-linux-%E4%BF%A1%E5%8F%B7-%E5%A0%86%E6%A0%88 此文只简单分析发送信号给用户程序后,用户堆 ...

  4. eclispse快捷操作

    1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2 显示搜索对话框:Ctrl+H快速O ...

  5. discuz x2 diy 模块的样式点击不管用,模块的数据、标题都可以编辑

    这个是diy模板的文件忘记添加   <style id="diy_style" type="text/css"></style>   一 ...

  6. 在ECSHOP后台的订单列表中显示配送方式

    熟悉ECSHOP后台的人都知道,只有点击某个具体的订单,进入订单详细页面才能看到该订单的配送方式,最模板修改的目的,是想让管理者在订单列表页面 就能看到该订单的配送方式. 下面是修改方法:首先来修改 ...

  7. js 判断某个对象是不是dom对象

    <script type="text/javascript">//首先要对HTMLElement进行类型检查,因为即使在支持HTMLElement的浏览器中,类型却是有 ...

  8. hdwiki model目录下的函数类

    model目录下的函数类    actions.class.php(站内地图相关) getHTML:获得页面菜单和相关信息 getMap:生成站内地图 adv.class.php 对wiki_adve ...

  9. shareSDK集成步骤

    按下面目录结构吧sdk的目录文件拷贝到自己的工程中 针对各个平台的分享格式,整理成了一个工具类,不同的平台分享的参数http://wiki.mob.com/不同平台分享内容的详细说明/ package ...

  10. 【转】启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法! .

    转载地址:http://blog.csdn.net/zyz511919766/article/details/7442633 原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者j ...