(3)登录界面———注册界面

本博文禁止随意转载
本来是先写的添加好友功能,但是还是决定先把数据录入的部分先写出来,免得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)没有考虑到同名用户的提醒,相同姓名的用户是不允许注册的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值