不飞则已,一飞冲天;不鸣则已,一鸣惊人。这篇文章主要讲述8.Android-简单的登录案例编写相关的知识,希望能为你提供帮助。
本章来学习登录案例,由于还未学习自定义控件外观,所以ui界面先用最简单的,并保存登录账号密码到data/data/包名/files下
【8.Android-简单的登录案例编写】
1.学习之前需要掌握的Context类(通过Context来往APK包所在目录下读写登录信息配置文件)
Context:可以理解为对APK的工具管家,通过Context可以访问当前应用相关的全局信息(系统资源)、 也可以发送广播、访问全局包信息、开启另外的activity、
1.1 如何获取Context
通过MainActivity.this获取
1.2 本章要用的Context常用的方法有:
FileOutputStream openFileOutput (String name, int mode); //将数据存储到/data/data/< packagename> /files/nam文件里, 注意这里指定的name文件名不可以包含路径 // mode:可以填入MODE_PRIVATE(文件只能由调用应用程序访问)、MODE_APPEND(追加内容模式)、MODE_WORLD_READABLE(文件支持所有人可读)、MODE_WORLD_WRITEABLE(文件支持所有人可写)FileInputStream openFileInput (String name) //和openFileOutput()对应,该方法用于读取/data/data/< packagename> /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 ActivityimplementsOnClickListener{ 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(); } }@Overridepublic 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; } }
推荐阅读
- windows系统bat批处理文件打开Android模拟器
- Android中通过Java代码实现ScrollView滚动视图-以歌词滚动为例
- Scala与Java(为什么要学习Scala())
- 逆向工程软件专用API的教程(破解你的Couch)
- Buggy CakePHP代码(CakePHP开发人员最常犯的6个错误)
- 从头开始(我如何构建开发人员的梦想键盘)
- 分离焦虑(使用Linux命名空间隔离系统的教程)
- 完美的地图(使用D3.js制作精美的Web地图)
- 电子游戏物理教程-第二部分(实体物体的碰撞检测)