【Android】大作业 功能1:用户信息注册

功能1:用户信息注册
  1. 完成内容:
    (1)使用TextView、EditText、RadioButton和CheckBox组件显示用户注册UI
    (2)使用SharedPreferences存储数据
  2. 需求说明:
    (1)创建线性布局的XML文件
    (2)在布局文件中添加TextView、EditText、RadioButton和CheckBox组件
    (3)使用SharedPreferences实现数据存储。

参考了这篇👉传送门

1 定义SharedPreferences方法

MySharedPreferences.java

package cn.com.sgmsc.news;
 
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
 
public class MySharedPreference {
    private static SharedPreferences preContext = null;
    
    private static SharedPreferences getPreference(Context cx) {
        return PreferenceManager.getDefaultSharedPreferences(cx);
    }
    //注册
    public static void register(Context cx, String username, String password) {
        setValue(cx, username, password);
    }
    //设置用户ID
    public static void saveNames(Context cx, String username, String password) {
        setValue(cx, username, password);
    }
    
    //根据关键词key映射得到相应的字符串
    public static String getStringValue(Context cx, String key) {
        if (preContext == null) {
            preContext = getPreference(cx);
        }
 
        return preContext.getString(key, "error");
    }
    
    //根据关键词key映射得到“记住我”标志位状态
    public static int getFlag(Context cx, String key) {
        if (preContext == null) {
            preContext = getPreference(cx);
        }
 
        return preContext.getInt(key, 0);
    }
    
    //设置键值对<key,val>
    private static void setValue(Context cx, String key, String val) {
        if (preContext == null) {
            preContext = getPreference(cx);
        }
        Editor ed = preContext.edit();
        ed.putString(key, val);
        boolean ret = ed.commit();
    }
    
    //设置键值对<key,val>
    private static void setValue(Context cx, String key, int val) {
        if (preContext == null) {
            preContext = getPreference(cx);
        }
        Editor ed = preContext.edit();
        ed.putInt(key, val);
        boolean ret = ed.commit();
    }
 
    //保存人数
    public static void saveCount(Context cx, String key, int count) {
        setValue(cx, key, count);
    }
    
    //保存“记住我”标注位状态
    public static void saveRemember(Context cx,int i) {
    	setValue(cx,"flag",i);
    }
 
    //根据关键词key映射得到相应的整型值
    public static int getIntValue(Context cx, String key) {
        if (preContext == null) {
            preContext = getPreference(cx);
        }
 
        return preContext.getInt(key, 0);
    }
 
}

2 定义登录和注册界面事件

LoginActivity.java

package cn.com.sgmsc.news;

import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Intent;

import android.preference.PreferenceManager;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import cn.com.sgmsc.news.R;

public class LoginActivity extends Activity {
	private static EditText etUid;                  //接收用户id组件
	private static EditText etPwd;                  //接收用户密码组件
	private static CheckBox cb;                     //"记住我"复选框组件
	private static String uidstr;                   //用户帐号
	private static String pwdstr;                   //用户密码
	private int count;								//统计注册人数
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        
        Button login = (Button) findViewById(R.id.btnLogin);
        Button register = (Button) findViewById(R.id.btnReg);
        
        etUid=(EditText) findViewById(R.id.etUid);       //获得帐号EditText
        etPwd=(EditText) findViewById(R.id.etPwd);       //获得密码EditText
        final TextView tips = (TextView) findViewById(R.id.tips);
        
        cb=(CheckBox) findViewById(R.id.cbRemember);     //获得CheckBox对象
        
        checkIfRemember();             //从SharedPreferences中读取用户的帐号和密码
        
        count = MySharedPreference.getIntValue(LoginActivity.this, "count");
        tips.setText("当前共有"+count+"人注册");
        
        //登录
        login.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String strUsername = etUid.getText().toString();
				String strPassword = etPwd.getText().toString();
				String defaultPass = MySharedPreference.getStringValue(LoginActivity.this, strUsername);
				if(strUsername.equals("")||strPassword.equals("")){
					showMessage("strnull");
				}
				if(defaultPass.equals(strPassword)) {
					 //匹配成功登录跳转
					if(cb.isChecked()) {
						for(int i=1;i<=count;i++) {
							//为了实现”记住我“功能,这里i从1开始
							String name = String.valueOf(i-1);
							name = MySharedPreference.getStringValue(LoginActivity.this, name);
							
							if(name.equals(strUsername)) {
								//如果勾选了”记住我“,而且用户名存在,则标记此时需要记住的用户
								MySharedPreference.saveRemember(LoginActivity.this, i);
							}
						}
					}
					else {
						//如果没有勾选”记住我“。那么将标志置为0
						MySharedPreference.saveRemember(LoginActivity.this, 0);
					}
					//跳转到菜单
                    Intent intent = new Intent(LoginActivity.this, MenuActivity.class);
                    startActivity(intent);
					finish();
				}
				else {
					showMessage("error");
					etPwd.setText("");
				}
			}
		});
        
        //注册
        register.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String strUsername = etUid.getText().toString();
				String strPassword = etPwd.getText().toString();
				boolean isNameRepeat = false;
				Log.i("syxtest","strUsername="+strUsername+",strPassword="+strPassword);
				if(!strUsername.equals("") && !strPassword.equals("")) {
					//用户名和密码不能为空
					String[] names = new String[10];
					if(count > 0) {
						for(int i = 0;i < count;i++){
							//检测用户名是否已被注册
							names[i] = String.valueOf(i);
							String name = MySharedPreference.getStringValue(LoginActivity.this, names[i]);
							if(name.equals(strUsername)) {
								//如果用户名已存在   
								showMessage("exist");
								isNameRepeat = true;
								break;
							}
						}
					}
					//如果用户名还没有注册
					if(!isNameRepeat) {
						//键值对:<用户名,密码>
						MySharedPreference.register(LoginActivity.this, strUsername, strPassword);
						names[count] = String.valueOf(count);
						//键值对:<用户号count,用户名>
						MySharedPreference.saveNames(LoginActivity.this, names[count], strUsername);
						count = count + 1;
						//键值对:<count,当前注册人数>
						MySharedPreference.saveCount(LoginActivity.this, "count", count);
						tips.setText("当前共有"+count+"人注册");
						showMessage("success");
					}
				}			
				else
					showMessage("strnull");
			}
		});
        
        
    }

    //方法:从SharedPreferences中读取用户的帐号和密码
    public void checkIfRemember(){
    	int i = MySharedPreference.getFlag(LoginActivity.this, "flag");
    	//如果最近登录的用户勾选了“记住我”,则自动填充用户名和密码
    	if(i!=0) {
    		String flag=String.valueOf(i-1);
    		uidstr=MySharedPreference.getStringValue(LoginActivity.this, flag);
    		pwdstr=MySharedPreference.getStringValue(LoginActivity.this, uidstr);
    		etUid.setText(uidstr);
    		etPwd.setText(pwdstr);
    		cb.setChecked(true);
    	}
    	
    }
    //方法:显示提示信息
    public void showMessage(String str) {
    	if(str.equals("error"))
    		Toast.makeText(LoginActivity.this, "用户名和密码不匹配!", Toast.LENGTH_SHORT).show();
    	else if(str.equals("success")) 
    		Toast.makeText(LoginActivity.this, "注册成功!", Toast.LENGTH_SHORT).show();
    	else if(str.equals("exist")) 
    		Toast.makeText(LoginActivity.this, "当前用户已被注册!", Toast.LENGTH_SHORT).show();
    	else if(str.equals("strnull"))
    		Toast.makeText(LoginActivity.this, "用户名或密码为空!", Toast.LENGTH_SHORT).show();
    }
}

3 定义登录和注册界面的UI

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:gravity="center_horizontal"
	android:background="@drawable/back"
	>								<!-- 声明垂直分布的线性布局 -->
    <TextView 
        android:id="@+id/TextView0" 
        android:text="@string/login"
        style="@style/title"
        android:paddingTop="20dip" 
        android:paddingBottom="20dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:gravity="center"
        android:password="false"
        >
    </TextView>
	<LinearLayout
		android:orientation="horizontal"
		android:paddingTop="25px"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_gravity="center_horizontal"
		>
		<TextView 
		    android:text="@string/tvUid"
			android:layout_width="100px"
			style="@style/text"
			android:layout_height="wrap_content"
			android:layout_gravity="center_vertical"
		/>
		<EditText
			android:id="@+id/etUid"
			android:singleLine="true"
			style="@style/edit"
			android:layout_width="150px"
			android:layout_height="wrap_content"
		/>
		</LinearLayout>
	<LinearLayout
		android:orientation="horizontal"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_gravity="center_horizontal"
		>
		<TextView 
			android:text="@string/tvPwd"
			style="@style/text"
			android:layout_width="100px"
			android:layout_height="wrap_content"
			android:layout_gravity="center_vertical"
			/>
		<EditText
			android:id="@+id/etPwd"
			style="@style/edit"
			android:singleLine="true"
			android:password="true"
			android:layout_width="150px"
			android:layout_height="wrap_content"
			/>
		</LinearLayout>
		
	<!-- 新增加的LinearLayout -->	
	<LinearLayout
		android:orientation="horizontal"
		android:layout_gravity="center_horizontal"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		>
		<CheckBox 
		    android:id="@+id/cbRemember"
			android:text="@string/cbRemember"
			style="@style/text"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:layout_gravity="center_vertical"
			android:checked="false"
			/>
		</LinearLayout>
	    		
	<LinearLayout
        android:paddingTop="20dip" 
        android:paddingBottom="20dip"
        android:paddingRight="20dip" 
		android:orientation="horizontal"
		android:gravity="right"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		>			<!-- 声明于显示按钮的线性布局 -->

		<TextView  
            android:id="@+id/tips"
            android:alpha="1"
            style="@style/tips"
            android:gravity="center"
            android:layout_width="0dp"  
            android:layout_height="wrap_content"  
            android:layout_weight="1.0"
            /> 

		<Button
			android:id="@+id/btnLogin"
			android:text="@string/btnLogin"
			style="@style/button"
			android:minWidth="70dip"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			/>
		<Button
			android:id="@+id/btnReg"
			android:text="@string/btnReg"
			style="@style/button"
			android:minWidth="70dip"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			/>
		</LinearLayout>
		
</LinearLayout>

4 定义UI名称和风格

包含全部UI的名称和风格,在后续功能中不再贴这些代码了

  1. string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">手机新闻系统开发(syx制作)</string>
    <!-- login -->
    <string name="login">用户登录</string>
    <string name="tvUid">账 号:</string>
    <string name="tvPwd">密 码:</string>
    <string name="btnLogin">登录</string>
    <string name="btnReg">注册</string>
    <string name="cbRemember">记住我</string>
    <string name="hello_world">Hello world!</string>
    <!-- menu -->
    <string name="btnAdd">添加新闻</string>
    <string name="btnDelete">删除新闻</string>
    <string name="btnDel">删除</string>
    <string name="btnQuery">快速查询</string>
    <string name="btnModify">修改新闻</string>
    <string name="btnView">查看</string>
    <string name="btnOk">确认</string>
    <string name="btnCancel">取消</string>
    <string name="dialog_message">确认删除此条新闻吗?</string>
    <!-- detail -->
    <string name="btnMod">更新</string>
    <string name="tvTitle">标题</string>
    <string name="tvType">类型</string>
    <string name="hintNewsContent">编辑新闻...</string>
    <string name="btnBack">返回</string>
    <string name="title_activity_query">QueryActivity</string>
    <!-- query -->
    <string name="btnQuery1">查询</string>

</resources>
  1. style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="tips">
        <item name="android:textSize">16sp</item>
		<item name="android:textColor">#FFB6C1</item>
		<item name="android:textStyle">bold</item>
    </style>
	<style name="button">
		<item name="android:textSize">20sp</item>
		<item name="android:textColor">#F8F8FF</item>
		<item name="android:textStyle">bold</item>
	</style>
	<style name="title">
		<item name="android:textSize">22sp</item>
		<item name="android:textColor">#2F4F4F</item>
		<item name="android:textStyle">bold</item>
	</style>
	<style name="text">
		<item name="android:textSize">18sp</item>
		<item name="android:textColor">#A52A2A</item>
		<item name="android:textStyle">bold</item>
	</style>
	<style name="edit">
		<item name="android:textSize">22sp</item>
		<item name="android:textColor">#000000</item>
		<item name="android:textStyle">bold</item>
	</style>
	<style name="content">
		<item name="android:textSize">16sp</item>
		<item name="android:textColor">#003cda</item>
		<item name="android:textStyle">bold</item>
	</style>
	<style name="detailTitle">
	    <item name="android:textSize">22sp</item>
		<item name="android:textColor">#FFFFFF</item>
		<item name="android:textStyle">bold</item>
	</style>
	<style name="query">
	    <item name="android:textSize">15sp</item>
		<item name="android:textColor">#FFFFFF</item>
		<item name="android:textStyle">bold</item>
	</style>
</resources>

5 界面展示

记住我

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

社恐患者

赚钱不易呜呜呜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值