Android登陆用户的实现

本文介绍了一种在Android应用中保存和读取用户账号密码的方法,通过使用输出流来保存用户输入的账号密码,并利用输入流在下次启动应用时读取这些信息。文章详细展示了如何在activity.xml中布局账号密码输入框及保存选项,同时提供了MainActivity.java和UserInfoUtils.java的核心代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           **重点内容**
           1.保存用户密码与账号,使用输出流
           2.读取用户密码与账号,使用输入流

activity.xml布局文件:

<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"
    android:orientation="vertical"
    tools:context="com.example.tellcall.MainActivity"
    >
   <EditText 
         android:id="@+id/edittext1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="请输入账号"
         />
    <EditText 
         android:id="@+id/edittext2"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:password="true"
         android:hint="请输入密码"
         />
    <RelativeLayout
        android:id="@+id/container2" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <CheckBox 
            android:id="@+id/checkbosx1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="保存账户密码"
            android:layout_marginTop="15sp"
            android:layout_marginLeft="10sp"
            android:textColor="#ED1C21"/>
        <Button 
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="登录"
            android:layout_below="@+id/checkbosx1"
            android:layout_alignParentRight="true"
            android:layout_marginRight="30sp"/>
    </RelativeLayout>

</LinearLayout>

MainActivity.java文件中的代码:

这里写代码片
package com.example.eleventlogger;

import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
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 Activity {
    private EditText edit1;
    private EditText edit2;
    private CheckBox chkb_1;
    private Button but_1;
    private CharSequence passward;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 找到我们需要的控件
        edit1 = (EditText) findViewById(R.id.edittext1);
        edit2 = (EditText) findViewById(R.id.edittext2);
        chkb_1 = (CheckBox) findViewById(R.id.checkbosx1);
        but_1 = (Button) findViewById(R.id.button1);
        // 设置按钮事件内部类
        but_1.setOnClickListener(new MyCilkListener());
        //<String,String>可以接收到用户密码与用户账号的两个值
         Map<String,String>maps = UserInfoUtils.readInfo();
         if(maps == null){
            //把用户账号与用户密码取出来
            String name = maps.get("name");
             String passward = maps.get("passward");
             //把用户账号与密码显示在EditText控件上
             edit1.setText(name);
             edit2.setText(passward);
         }
    }

    public class MyCilkListener implements OnClickListener {

        @Override
        public void onClick(View arg0) {
            // 拿到文本内容
            String name = edit1.getText().toString().trim();
            String passward = edit2.getText().toString().trim();
            // 判断文本内容是否为空
            if (!TextUtils.isEmpty(name) || !TextUtils.isEmpty(passward)) {
                // 判断CheckBox是否勾选
                if (chkb_1.isChecked()) {
                    // 将账户与密码保存起来
                    boolean result = UserInfoUtils.saveInfo(name, passward);
                    if (result) {
                        Toast.makeText(MainActivity.this, "保存成功", 1).show();

                    } else {
                        Toast.makeText(MainActivity.this, "保存失败", 1).show();
                    }

                } else {
                    Toast.makeText(MainActivity.this, "请勾选保存账户与密码", 1).show();
                }
            } else {
                Toast.makeText(MainActivity.this, "请输入用户名与密码", 1).show();
            }

        }

    }

}

UserInfoUtils.java文件的代码:

package com.example.eleventlogger;

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.Map;
/*
 * 运行出“保存失败”的原因:
 * 1.name 与 passward的名称要去MainActitvity中的名称相同
 * 2.文件保存的位置出现错误
 * 正确的路径:/data/data/com.example.eleventlogger/info.txt
 * 运行错误时的路径:/data/data/com.exmple.elventlogger
 *    2.1 包名不能输入错误
 *    2.2 必须给保存起一个 名字
 */
public class UserInfoUtils {
    public static boolean saveInfo(String name, String  passward) {
        try {
            String result = name + "##" + passward;
            // 创建file类指定我们要把数据存储的位置
            File file = new File("/data/data/com.example.eleventlogger/info.txt");
            // 创建一个文件输出流
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(result.getBytes());
            //关闭输出流
            fos.close();
            return true;

        } catch (Exception e) {

            e.printStackTrace();

            return false;

        }

    }

/*
 * 获取到保存文本的数据,并将他们读取到显示框里面,第二次不用再次输入密码与账户
 */
    public static Map<String, String> readInfo() {
        // 定义Map,这是一个集合
        try {
            Map<String, String> maps = new HashMap<String, String>();
            File file = new File("/data/data/com.example.eleventlogger/info.txt");
            // 文本输入流
            FileInputStream fis = new FileInputStream(file);
            //将读取的数据保存至缓冲区
            BufferedReader bufr = new BufferedReader(new InputStreamReader(fis));
            String content = bufr.readLine();// 读取数据
            // 切割字符串封装到map集合中
            String[] splits = content.split("##");
            String name = splits[0];
            String passward = splits[1];
            // 把name 与 pwd 放入map中
            maps.put("name", name);
            maps.put(" passward", passward);
            fis.close();
            return maps;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值