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简单登陆页面的更多相关文章
- Android 简单登陆 涉及 Button CheckBox TextView EditText简单应用
GitHub地址:https://github.com/1165863642/LoginDemo 直接贴代码<?xml version="1.0" encoding=&quo ...
- Android 使用 intent 实现简单登陆页面
前言 第一个 Android 程序,应该有些纪念的意义吧~ 主页面布局 给 Button 添加响应函数:android:onClick="login" public void lo ...
- android简单登陆和注册功能实现+SQLite数据库学习
最近初学android,做了实验室老师给的基本任务,就是简单的登陆和注册,并能通过SQLite实现登陆,SQlLite是嵌入在安卓设备中的 好了下面是主要代码: 数据库的建立: 这里我只是建立了一个用 ...
- Android笔记-4-实现登陆页面并跳转和简单的注册页面
实现登陆页面并跳转和简单的注册页面 首先我们来看看布局的xml代码 login.xml <span style="font-family:Arial;font-size:18px; ...
- 小KING教你做android项目(二)---实现登陆页面并跳转和简单的注册页面
原文:http://blog.csdn.net/jkingcl/article/details/10989773 今天我们主要来介绍登陆页面的实现,主要讲解的就是涉及到的布局,以及简单的跳 ...
- .Net程序猿玩转Android开发---(3)登陆页面布局
这一节我们来看看登陆页面如何布局.对于刚接触到Android开发的童鞋来说.Android的布局感觉比較棘手.须要结合各种属性进行设置,接下来我们由点入面来 了解安卓中页面如何布局,登陆页面非常eas ...
- tkinter做一个简单的登陆页面
做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...
- tkinter做一个简单的登陆页面(十六)
做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...
- python编写简单的html登陆页面(4)
python编写简单的html登陆页面(4) 1 在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将动态态分配数据,建立表格,存放学生信息 2 实现的效果如下: 3 动 ...
随机推荐
- flex datagrid 换行
<mx:DataGrid id="myGrid" width="100%" height="90%" headerStyleName= ...
- grep、egrep、fgrep
grep: global search regular expression and printing
- bin和sbin的区别
bin和sbin的区别: bin:用户命令(所有用户均可使用) sbin:管理命令(通常只有管理员可以使用)
- freemarker为null处理
http://599073210-qq-com.iteye.com/blog/1401731
- discuz x2 diy 模块的样式点击不管用,模块的数据、标题都可以编辑
这个是diy模板的文件忘记添加 <style id="diy_style" type="text/css"></style> 一 ...
- greenplum集群安装
一.环境配置 1.地址分配 192.168.1.201 mdw master 192.168.1.202 sdw1 segment1 192.168.1.203 sdw2 segment2 2.创建用 ...
- ACE的接受器(Acceptor)和连接器(Connector):连接建立模式
ACE_Acceptor工厂的open()方法,或是它的缺省构造器(它实际上会调用open()方法),来开始被动侦听连接.当接受器工厂的open()方法被调用时,如果反应堆单体还没有被实例化,open ...
- [转]iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem
转载地址:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINav ...
- 20151124001 关闭C#主窗体弹出是否关闭对话框
关闭C#主窗体弹出是否关闭对话框 private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e) { ...
- IP Address 分类: POJ 2015-06-12 19:34 12人阅读 评论(0) 收藏
IP Address Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 19125 Accepted: 11053 Desc ...