本博文禁止随意转载
本来是先写的添加好友功能,但是还是决定先把数据录入的部分先写出来,免得bug太多
注册界面我选择用户可以自行设置用户名,密码,和手机号,密码需要一次确认,手机号在此后可以同样用于登录,添加好友等。
布局部分:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:text="用户注册界面"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textSize="30dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="90dp"
android:orientation="horizontal">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="请输入用户名"
/>
<EditText
android:id="@+id/name2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:hint="10个字以内"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="90dp"
android:orientation="horizontal">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="请输入密码"
/>
<EditText
android:id="@+id/password2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:hint=""
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="90dp"
android:orientation="horizontal">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="请再次输入密码"
/>
<EditText
android:id="@+id/password3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:hint=""
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="90dp"
android:orientation="horizontal">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="请输入手机号"
/>
<EditText
android:id="@+id/telephone1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:hint=""
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="1">
<Button
android:id="@+id/button1"
style="@android:style/Widget.Holo.Light.Button.Small"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:background="#FFFCFC"
android:text="注册" />
</LinearLayout>
</LinearLayout>
线性布局里面套线性,加上TextView卡空白。老套路了,之前我在线性下的横向线性还是有点不熟,这里细致讲解一下,
比如说常见的TextView+EditText,用layout_height确定LinearLayout的竖直长度后,其下分布键只需要layout_height保持"wrap_content"即可,"wrap_content"可以让大小处于最舒适的纵宽比例,我试过还是用dp长度自定义,但是对于不同机型的手机有时候按钮会卡出屏幕外,所以,"wrap_content"永远滴神,对于TextView,layout_height可控制其横向距离,但是对于EditText,它的layout_height在保持前面的适应性效果不佳,这里用android:layout_weight="1"达到相同效果。如果LinearLatyout设置宽度太长,"wrap_content"后只需要控制 android:layout_gravity="center_vertical"就可以让控件处于居中位置。
活动部分:
这里因为要用到数据库,先讲讲常见的三种储存方式
(1)SharedPreferences储存
SharedPreference是一种轻量级的数据存取方法,以键值对来存储应用程序的配置信息,只能存储基本的数据类型:boolean,float,int,long,string,在本次应用中目前的实践部分是记住密码按钮,这部分会在登录中细讲。
(2)SQLite数据库和LitePal数据库
SQL的数据库建立套路
创表–>分析后编写建表语句–>自定义类继承SQLiteOpenHelper在onCreate中执行
LitePal的数据库建立套路
创表–>由对应关系分别生成getter和setter–>在自己配置的litepal.xml文件中添加相应标签声明映射类–>oncreate中直接用getDatabase()建立数据库
LitePal相比与SQL优秀的地方就在于他采用了对象映射的模式,整个代码敲下来感觉思路很清晰,包括在之后的数据库更新,添加,删除,查询等里面代码格式也用的更舒服,作为新手我还是在此项目中优先选用LitePal,
这里为了以后方便浏览就顺便把创建的数据表贴出来
package com.example.wechat;
import org.litepal.crud.LitePalSupport;
public class User extends LitePalSupport{
private String name;
private String phonenumber;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这个开源库由于一直在更新,许多命名也有微小的改动,不能光看早期的书籍,对LitePal经验的时候最好配合官网教程食用。
public class Userregistration extends AppCompatActivity {
private EditText editText1;//用来接受四个输入框中的数据
private EditText editText2;
private EditText editText3;
private EditText editText4;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_registration);
Button button1=(Button)findViewById(R.id.button1);
editText1=(EditText)findViewById(R.id.name2);//将控件id相关联
editText2=(EditText)findViewById(R.id.password2);
editText3=(EditText)findViewById(R.id.password3);
editText4=(EditText)findViewById(R.id.telephone1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String inputText1=editText1.getText().toString();
String inputText2=editText2.getText().toString();
String inputText3=editText3.getText().toString();
String inputText4=editText4.getText().toString();
因为定义的editText1,2,3,4只是被与之控件相关联,这里getText()检索相关联的文本信息,再用toString转化成文本
if (((inputText1 == null || inputText1.equals(""))||(inputText2 == null || inputText2.equals("")))||(inputText3 == null || inputText3.equals(""))) {//判断用户是否输入内容
String a="您输入的用户名或密码为空";
Toast.makeText(Userregistration.this,a,Toast.LENGTH_SHORT).show();
}
else if((inputText4 == null || inputText4.equals(""))){
String c="您输入的手机号为空";
Toast.makeText(Userregistration.this,c,Toast.LENGTH_SHORT).show();
}
这里作为一个初学者,讲一下Java空字符串与null的区别:null是根本没有分配空间,还不是一个实例化的对象,而""已经实例化,表示的是一个空字符串
else if(inputText2.equals(inputText3)){
String d="注册成功!";
Toast.makeText(Userregistration.this,d,Toast.LENGTH_SHORT).show();
User user1=new User();//创建框架用来接受信息
user1.setName(inputText1);
user1.setPassword(inputText2);
user1.setPhonenumber(inputText4);
user1.save();//
Intent intent=new Intent(Userregistration.this,MainActivity.class);//此处识别到数据打到要求则注册成功,返回到登录界面
startActivity(intent);
}
else{
String b="您前后输入的密码不相同";
Toast.makeText(Userregistration.this,b,Toast.LENGTH_SHORT).show();
}
}
});
}
}
这里就是创建数据库中数据的内容了,最开始犯了个很低级的错误,用双等号来做字符串的判断,字符串只能用equals()的方法来进行比较
总结:在注册部分自学完了数据库内容,LItePal确实牛逼,除了个人LitePal的使用没跟上最新版本出了点小问题和一些低级的错误外,这部分也还是相对比较简单。
优化部分: (1)能让用上传个人头像,可以加一个按钮调取相框权限实现。
(2)用户除了登录所需的必要信息外其他个人信息的传入,比如说男女,城市,年龄等,可以不用输入的方法而是下滑框来从所有情况中选择。
(3)Ui框架美化,比如说输入框的四角变圆润,背景图片等。
(4)没有考虑到同名用户的提醒,相同姓名的用户是不允许注册的。