编写不易,如有转载,请声明出处:http://blog.csdn.net/zxc514257857/article/details/69219113

Demo效果展示如下:

布局代码如下:

//(layout)activity_main.xml
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.test.qqlogin.MainActivity"android:orientation="vertical"><RelativeLayoutandroid:layout_weight="1"android:background="#11B6F4"android:layout_width="match_parent"android:layout_height="0dp"><ImageViewandroid:src="@mipmap/pic"android:layout_centerInParent="true"android:layout_width="wrap_content"android:layout_height="wrap_content"/></RelativeLayout><RelativeLayoutandroid:gravity="center_horizontal"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="0dp"><RelativeLayoutandroid:layout_centerInParent="true"android:layout_width="wrap_content"android:layout_height="wrap_content"><EditTextandroid:paddingLeft="10dp"android:id="@+id/et_username"android:layout_width="400dp"android:layout_height="30dp"android:background="@drawable/edittext_shape"android:singleLine="true"android:hint="QQ号码/手机/邮箱"/><EditTextandroid:layout_marginTop="5dp"android:paddingLeft="10dp"android:layout_below="@+id/et_username"android:id="@+id/et_password"android:inputType="textPassword"android:layout_width="400dp"android:layout_height="30dp"android:background="@drawable/edittext_shape"android:singleLine="true"android:hint="密码"/><CheckBoxandroid:id="@+id/cb_savePassword"android:layout_marginTop="5dp"android:textSize="18sp"android:text="记住密码"android:layout_below="@+id/et_password"android:layout_width="wrap_content"android:layout_height="wrap_content"/><RelativeLayoutandroid:layout_below="@+id/cb_savePassword"android:layout_marginTop="5dp"android:layout_width="400dp"android:layout_height="30dp"><Buttonandroid:id="@+id/login"android:layout_width="180dp"android:layout_height="wrap_content"android:text="确    定"android:textSize="20sp"android:layout_alignParentLeft="true"android:background="@drawable/button_selector"android:textColor="#fff"android:onClick="login"/><Buttonandroid:id="@+id/logout"android:layout_width="180dp"android:layout_height="wrap_content"android:text="退    出"android:textSize="20sp"android:layout_alignParentRight="true"android:background="@drawable/button_selector"android:textColor="#fff"android:onClick="logout"/></RelativeLayout></RelativeLayout></RelativeLayout>
</LinearLayout>
-----------------------------------------------------------
//(layout)activity_second.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:background="@mipmap/p1"android:layout_width="match_parent"android:layout_height="match_parent"/>
</LinearLayout>
-----------------------------------------------------------
//(drawable)button_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"><shape android:shape="rectangle"><corners android:radius="10px"/><solid android:color="@color/colorYellow"/><stroke android:width="1px" android:color="#FFF"/></shape></item><item android:state_pressed="false"><shape android:shape="rectangle"><corners android:radius="10px"/><solid android:color="@color/colorBlue"/><stroke android:width="1px" android:color="#FFF"/></shape></item><item android:state_selected="true"><shape android:shape="rectangle"><corners android:radius="10px"/><solid android:color="@color/colorYellow"/><stroke android:width="1px" android:color="#FFF"/></shape></item><item android:state_selected="false"><shape android:shape="rectangle"><corners android:radius="10px"/><solid android:color="@color/colorBlue"/><stroke android:width="1px" android:color="#FFF"/></shape></item>
</selector>
-----------------------------------------------------------
//(drawable)edittext_shape.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#fff"/><corners android:radius="8px"/><stroke android:color="#2BA6E1"android:width="2px"/>
</shape>

activity代码如下:

//MainActivity
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
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.FileOutputStream;
import java.io.InputStreamReader;public class MainActivity extends AppCompatActivity {private EditText mEt_username;private EditText mEt_password;private CheckBox mCb_savePassword;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//强制设置为横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);initView();initData();exitActivity();}private void exitActivity() {ExitApplication.getInstance().addActivity(MainActivity.this);}private void initView(){mEt_username = (EditText) findViewById(R.id.et_username);mEt_password = (EditText) findViewById(R.id.et_password);//设置密码输入模式mEt_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);mCb_savePassword = (CheckBox) findViewById(R.id.cb_savePassword);}//进入程序  如果有缓存  就读取缓存的帐号密码private void initData(){//帐号密码保存在内存缓存中File file = new File(this.getCacheDir(),"QQLogin.txt");read(file);}private void read(File file) {//帐号密码保存在SDcard中//File file = new File(Environment.getExternalStorageDirectory(),"QQLogin.txt");if(file.exists() && file.length() > 0){try {//读流FileInputStream fis = new FileInputStream(file);BufferedReader br = new BufferedReader(new InputStreamReader(fis));String QQLogin = br.readLine();//帐号密码用##分隔,所以用##切割String username = QQLogin.split("##")[0];String password = QQLogin.split("##")[1];//并将缓存的帐号密码显现mEt_username.setText(username);mEt_password.setText(password);mCb_savePassword.setChecked(true);fis.close();br.close();} catch (Exception e) {e.printStackTrace();}}}public void login(View view) {String username = mEt_username.getText().toString().trim();String password = mEt_password.getText().toString().trim();if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {Toast.makeText(this, "帐号或密码为空,请重新输入!", Toast.LENGTH_SHORT).show();return;}if (username.equals("123456") && password.equals("123456")) {Intent intent = new Intent(MainActivity.this, SecondActivity.class);startActivity(intent);}checkAndWrite(username, password);}private void checkAndWrite(String username , String password) {if (mCb_savePassword.isChecked()) {Toast.makeText(this, "记住密码!", Toast.LENGTH_SHORT).show();//帐号密码保存在内存缓存中File file = new File(this.getCacheDir(),"QQLogin.txt");try {//写流FileOutputStream fos = new FileOutputStream(file);fos.write((username + "##" + password).getBytes());Toast.makeText(this, "数据保存成功", Toast.LENGTH_SHORT).show();fos.close();} catch (Exception e) {Toast.makeText(this, "数据保存失败", Toast.LENGTH_SHORT).show();e.printStackTrace();Log.i("Main", e.toString());}} else {Toast.makeText(this, "取消密码!", Toast.LENGTH_SHORT).show();File file = new File(this.getCacheDir(),"QQLogin.txt");if(file.exists() && file.length() > 0){file.delete();}}}//点击登录按钮public void logout(View view){needEnterPwd();}//点击返回按钮public void onBackPressed(){needEnterPwd();}//需输入密码private void needEnterPwd() {final EditText password = new EditText(this);password.setFocusable(true);//设置为密码不可见形式password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("请输入退出密码").setIcon(R.mipmap.ic_launcher).setNegativeButton("取消", null).setCancelable(false).setView(password).setPositiveButton("确定",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {String inputName = password.getText().toString();if(inputName.equals("123456")){//退出所有Activity操作ExitApplication.getInstance().exit();}else{new AlertDialog.Builder(MainActivity.this).setTitle("警告").setIcon(R.mipmap.ic_launcher).setMessage("密码输入错误,请重新输入!").setCancelable(false).setNegativeButton("取消",null).setPositiveButton("确定",null).show();}}}).show();}
}
-----------------------------------------------------------
//SecondActivity
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;public class SecondActivity extends AppCompatActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);//强制设置为横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);exitActivity();}private void exitActivity() {ExitApplication.getInstance().addActivity(SecondActivity.this);}
}
-----------------------------------------------------------
//ExitApplication
import android.app.Activity;
import android.app.Application;
import java.util.ArrayList;
import java.util.List;public class ExitApplication extends Application {private List<Activity> activityList = new ArrayList<>();private static ExitApplication instance;public ExitApplication(){}public static ExitApplication getInstance(){if(null == instance){instance = new ExitApplication();}return instance;}//添加Activity到容器中public void addActivity(Activity activity){activityList.add(activity);}//遍历所有Activity并finishpublic void exit(){for(Activity activity : activityList){//依次关闭activity.finish();}//强制退出System.exit(0);}
}

Demo下载请移步:http://download.csdn.net/detail/zxc514257857/9833032

----------因本人才疏学浅,如博客或Demo中有错误的地方请大家随意指出,与大家一起讨论,共同进步,谢谢!----------

Android中实现帐号密码登录及进行内存缓存逻辑(仿QQ)相关推荐

  1. linux中密码配置文件,linux中的帐号密码配置文件

    /etc/passwd./etc/shadow./etc/group和/etc/gshadow这四个配置文件用于系统帐号管理,都是文本文件,可用vim等文本编辑器打开. /etc/passwd用于存放 ...

  2. 排错经历:openstack搭建dashboard进入输入帐号密码登录后报错

    查看error日志: cat /var/log/httpd/error.log [Thu Oct 13 13:37:00 2016] [error] raise exceptions.Connecti ...

  3. Wireshark分析实战:某达速递登录帐号密码提取

    "使用某达速递的官网登陆及APP登录,来学习Wireshark的使用." 在如今这个HTTPS深入人心的情况下,作为一个也不算很小的快递,某达速递,不但全站HTTP,而且登录帐号密 ...

  4. 教你如何保护MSN和Hotmail的帐号密码安全

    教大家几个如何更好地保护MSN帐号的方法,预防帐号密码被盗: 技巧1:绑定手机号码,增强帐号安全. 技巧2:增加密码强度(复杂性),养成定期更换密码习惯. 技巧3:不让PC自动"保存密码&q ...

  5. 找回在foxmail中登录过的帐号密码

    一.场景 一直用工作电脑的foxmail收发邮件,在家想登录邮箱时,居然忘记了密码,试不出来: 就想着工作电脑中的foxmail一直是自动登录,应该将帐号密码记录在某处,一试果然可行,现分享给大家 二 ...

  6. 微信小程序激活账号时,提示“此帐号已激活,请使用帐号密码直接登录”

    最近准备研究下微信小程序,先去申请个小程序账号.于是乎,在通过邮件中的链接激活账号时,遇到了这个问题. 解决方法 你没看错,就是字面的意思,去登录页,点击使用账号登录,千万不要扫码登录. 用之前注册的 ...

  7. python获取路由器数据包pppoe_python3登录极路由并读取宽带帐号帐号密码.py

    python3登录极路由并读取宽带帐号帐号密码,fiddler抓包分析过程略... 步骤:1.登录路由,提取stok. 2.用stok拼成url,post请求 3.解析json数据 代码: " ...

  8. 从Discuz迁移帐号密码到NodeBB

    从Discuz迁移帐号密码到NodeBB 最近论坛要从Discuz改版到NodeBB中,由于原有dz框架使用了较长时间,积累了一定的用户数,为了对用户进行无感知的迁移,首先需要将账户登录的问题解决. ...

  9. 域帐号密码快过期邮件提醒

    社会的快速发展,企业的规模也随之变大,这样企业的人数自然也增多,由于人数的众多,为了便于管理所以用起了域环境,但是根据某些企业的性质,部分员工也可能不登陆域帐号,以至密码过期,这样,时间一长,域帐号的 ...

最新文章

  1. 华为4D成像雷达、智能驾驶平台MDC 810
  2. 安测云验证有CTA问题
  3. 0x0F19B7EC (ucrtbased.dll)处(位于 ex6.exe 中)引发的异常: 0xC0000005: 写入位置 0x00740000 时发生访问冲突。
  4. [Hive_6] Hive 的内置函数应用
  5. 最简单的基于FFMPEG的视频编码器(YUV编码为H.264)
  6. 如何绘制业务架构图 — 3.分解图
  7. JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))
  8. re: Asp.net常用的51个代码(非常实用)(转)
  9. js实现treeview 级联修改状态
  10. [转载] numpy教程:矩阵matrix及其运算
  11. java水果超市管理系统
  12. 纯干货,用好PPT中的异形,提高页面的设计感,建议收藏!
  13. linux 终端 backspace不能删除字符 出现^H
  14. 用什么软件可以编辑pdf文件
  15. linux如何后台执行程序?
  16. 洛谷P3097 - [USACO13DEC]最优挤奶Optimal Milking
  17. Cannot start container web: iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 32797
  18. Google云存储服务GDrive再度浮出水面
  19. c++获取umg ue_[UE4][V4.10]C++中定义UMG widget变量时的头文件引用有关问题
  20. 数字正交下变频(多相滤波法)

热门文章

  1. Python2中编码错误---重组人表皮生长因子凝胶(易孚格式转化为UTF-8...
  2. 自建pop邮件服务器,CentOS邮件服务器搭建系列—— POP / IMAP 服务器的构建( Dovec-站长资讯中心...
  3. 有效地解决低阶矩阵完全问题
  4. 机器学习|3.贝叶斯分类器
  5. python 贝叶斯分类器sklearn_使用sklearn自带的贝叶斯分类器进行文本分类和参数调优...
  6. PLSQL的安装和配置
  7. python读取CSV文件显示锘縟ate
  8. Spark读取日志文件集中文乱码解决方法
  9. matlab中pdf函数使用,matlab2c使用c++实现matlab函数系列教程-poisspdf函数
  10. fpga map测试_FPGA学习之RoadMap