zoukankan      html  css  js  c++  java
  • android登录实现,存储数据到/data/data/包名/info.txt

    1.一个简单登录界面布局代码如下:

    @1采用线性布局加相对布局方式

    @2线性布局采用垂直排列

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.market.login.MainActivity">
    
        <EditText
            android:id="@+id/et_name"
            android:layout_marginTop="150dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <EditText
            android:id="@+id/et_pwd"
            android:layout_marginTop="20dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_marginTop="20dp"
                android:layout_height="wrap_content">
                <CheckBox
                    android:id="@+id/cb"
                    android:layout_width="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_centerVertical="true"
                    android:layout_height="wrap_content"
                    android:text="是否记住密码"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="登录"
                    android:layout_marginRight="50dp"
                    android:layout_centerHorizontal="true"
                    android:layout_alignParentRight="true"/>
            </RelativeLayout>
    </LinearLayout>

    界面效果如下:

    2.代码逻辑,分为MainActivity类和SaveUserInfo 工具类

    分三步:初始化UI,初始化数据(加载),初始化控制器

    @1主代码如下

    package com.market.login;
    
    import android.app.Activity;
    import android.os.Bundle;
    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 java.util.Map;
    
    import static com.market.login.R.id.cb;
    
    public class MainActivity extends Activity {
    
        private Button btn;
        private EditText et_name;
        private EditText et_pwd;
        private CheckBox cb;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
            loadData();
    
    
        }
    
        public void login(View v){
            String name = et_name.getText().toString().trim();
            String password = et_pwd.getText().toString().trim();
            if(TextUtils.isEmpty(name) || TextUtils.isEmpty(password)){
                Toast.makeText(this,"用户名和密码不能为空",Toast.LENGTH_SHORT).show();
            }else{
                if(cb.isChecked()) {//如果保存密码和名
                    //开始保存,保存到文件,下次进来先读取这个文件
                    SaveUserInfo.saveInfo(name,password,true);
                    //提交用户名和密码给服务器
                    Log.v("Maintivity","提交用户名和密码给服务器");
    
                }else{
                    SaveUserInfo.saveInfo("","",false);
                    //直接提交用户名和密码给服务器
                    Log.v("Maintivity","直接提交用户名和密码给服务器");
                }
    
            }
    
        }
    
        public void initView(){
            btn = (Button)findViewById(R.id.btn);
            et_name = (EditText)findViewById(R.id.et_name);
            et_pwd = (EditText)findViewById(R.id.et_pwd);
            cb = (CheckBox)findViewById(R.id.cb);
    
        }
    
        public void loadData(){
            Map<String, String> info = SaveUserInfo.readInfo();
            if(info != null){
                et_name.setText(info.get("name"));
                et_pwd.setText(info.get("password"));
                cb.setChecked(info.get("isChecked").equals("true"));//如果保存了信息,那他上次就是勾选的
            }
    
        }
    }

    @2保存数据到/data/data/包名/下文件的工具类

    package com.market.login;
    
    import android.util.Log;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 保存用户信息的类,实现保存用户信息到文件
     * Created by Administrator on 2017/6/14.
     */
    
    
    public class SaveUserInfo {
    
        /*保存用户信息
        * name:用户名
        * password:密码
        * isChecked:是否勾选保存密码
        *
        * */
        public static boolean saveInfo(String name,String pwd,boolean isChecked){
            String info = name+"#"+pwd+"#"+isChecked;
            File file = new File("/data/data/com.market.login/info.txt");
            FileOutputStream fos = null;
            try {
                 fos = new FileOutputStream(file);
                fos.write(info.getBytes());
                return true;
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
    
                if(fos != null) {
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return false;
            }
        }
    
        /*读取用户信息*/
        public static Map<String,String> readInfo(){
            Map<String,String> map = null;
            File file = new File("/data/data/com.market.login/info.txt");
            if(!file.exists()){
                return map;
            }
            FileInputStream fis = null;
            BufferedReader br = null;
            try {
                fis = new FileInputStream(file);
                 br = new BufferedReader(new InputStreamReader(fis));
                String info = br.readLine();
                Log.e("SaveUserInfo",info);
                String[] split = info.split("#");
                map = new HashMap<String,String>();
                map.put("name",split[0]);//保存读取的用户名和密码到map中
                map.put("password",split[1]);
                map.put("isChecked",split[2]);
    
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
    
                if(fis != null) {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    
                if(br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return map;
            }
        }
    }

    3.运行效果,分三种情况

    @1用户名和密码填写有空

    @2没有勾选checkbox效果和退出后重新登入效果

       

    @3勾选后效果和退出重新登入效果

      

      

    需要程序源码的可以加我微信x241602私聊。
  • 相关阅读:
    Windows10 JDK1.8安装及环境变量配置
    Adobe Premiere Pro 2020破解教程
    如何消除任务栏系统更新失败的图标
    微服务架构-Gradle下载安装配置教程
    第十五次-语法制导的语义翻译
    第十四次——算符优先分析
    第09组 Alpha冲刺(4/4)
    第09组 Alpha冲刺(3/4)
    第09组 Alpha冲刺(2/4)
    第09组 Alpha冲刺(1/4)
  • 原文地址:https://www.cnblogs.com/huipengbo/p/7007601.html
Copyright © 2011-2022 走看看