EChat(简易聊天项目)一、登录注册实现

EChat项目的登录注册功能详细实现包括LoginActivity、SuccessActivity和RegistActivity等。使用LitePal数据库进行用户信息存储,登录时密码错误会显示提示,注册页面输入完整信息后进入提示页面,所有页面可通过Option菜单退出程序。

具体实现代码:

① 活动LoginActivity(负责登录界面)

package com.example.androidlogin;

import android.content.Intent;
import android.inputmethodservice.KeyboardView;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.litepal.crud.DataSupport;

import java.util.List;
import java.util.Map;


/*
程序启动时显示的第一个活动界面,即为登陆页面
 */
public class LoginActivity extends AppCompatActivity {


        //用户名文本编辑框
        private EditText username;
        //密码文本编辑框
        private EditText password;
        //登录按钮
        private Button login;
        //定义Intent对象,用来连接两个Activity
        private Intent intent;
        //重写的方法,启动一个Activity时,此方法会自动调用

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //将正在创建的活动添加到活动管理器里
            ActivityCollector.addActivity(this);
            //设置布局
            setContentView(R.layout.login_layout);

            //得到登录按钮对象
            Button login = (Button)findViewById(R.id.login);
            Button regist = (Button)findViewById(R.id.regist);
            //给登录按钮设置监听器
            login.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    //得到用户名和密码的编辑框
                    username = (EditText)findViewById(R.id.username);
                    password = (EditText)findViewById(R.id.password);

                    //判断是否成功匹配的标志
                    boolean flag = false;
                    //LitePal里遍历查询所有数据的方法
                    List<User> users = DataSupport.findAll(User.class);
                    for (User user : users){
                    //判断用户输入的用户名和密码是否与数据库中相同
                    if(user.getUsername().equals(username.getText().toString())&&
                            user.getPassword().equals(password.getText().toString())) {

                        flag = true;
                    }}

                    if(flag){
                        //创建Intent对象,传入源Activity和目的Activity的类对象
                        Intent intent = new Intent(LoginActivity.this, SuccessActivity.class);

                        //传递用户名到下一活动,用于显示

                        String USERNAME = username.getText().toString();
                        intent.putExtra("userName",USERNAME);
                        //启动Activity
                        startActivity(intent);
                    }else{
                        //登录信息错误,通过Toast显示提示信息
                        Toast.makeText(LoginActivity.this,"用户登录信息错误" , Toast.LENGTH_SHORT).show();
                    }
                }
            });
            regist.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v){
                    Intent intent = new Intent(LoginActivity.this,RegistActivity.class);
                    startActivity(intent);
                }
            });

        }

    //表明一个要销毁的活动从活动管理器里移除
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }

    //创建Option菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }
    //定义菜单响应事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.exit://当点击了退出时,退出程序
                //销毁所有活动
                ActivityCollector.finishAll();
                //杀掉当前进程
                android.os.Process.killProcess(android.os.Process.myPid());
                break;
                default:
        }
        return true;
    }
}

② 布局文件loginlayout(主体为几个控件,采用相对布局便于在视图中进行细致位置调整)

<?xml version="1.0" encoding="utf-8"?>
<!-- 此Activity采用相对布局 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>

    <ImageView
        android:layout_width="250dp"
        android:layout_height="154dp"
        android:layout_gravity="center"
        android:src="@drawable/timg"
        android:layout_weight="0.22" />


    <TextView
        android:id="@+id/title"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="登录页面"
        android:textColor="#000"
        android:textSize="30dip"
        android:layout_marginLeft="18dp"
        android:layout_marginStart="18dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="13dp" />

    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:text="用户名"
        android:layout_alignBaseline="@+id/username"
        android:layout_alignBottom="@+id/username"
        android:layout_alignRight="@+id/user_password"
        android:layout_alignEnd="@+id/user_password" />
    <!-- 文本编辑框 -->

    <TextView
        android:id="@+id/user_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:text="密码"
        android:layout_marginRight="33dp"
        android:layout_marginEnd="33dp"
        android:layout_alignBaseline="@+id/password"
        android:layout_alignBottom="@+id/password"
        android:layout_toLeftOf="@+id/password"
        android:layout_toStartOf="@+id/password" />

    <EditText
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:id="@+id/username"
        android:layout_marginTop="31dp"
        android:layout_below="@+id/title"
        android:layout_alignLeft="@+id/password"
        android:layout_alignStart="@+id/password"
        android:maxLines="1"
        android:hint="username"/>
        <!-- maxLines设置EditText最大行数,hint设置提示性文本 -->




    <EditText
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:id="@+id/password"
        android:layout_marginRight="62dp"
        android:layout_marginEnd="62dp"
        android:layout_marginTop="16dp"
        android:layout_below="@+id/username"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:maxLines="1"
        android:hint="password"/>
    <Button

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20dip"
        android:text="登录"
        android:id="@+id/login"
        android:layout_marginLeft="28dp"
        android:layout_marginStart="28dp"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/user_password"
        android:layout_alignStart="@+id/user_password" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/regist"
        android:textSize="20dip"
        android:text="注册"

        android:layout_alignBaseline="@+id/login"
        android:layout_alignBottom="@+id/login"
        android:layout_alignRight="@+id/password"
        android:layout_alignEnd="@+id/password"
        android:layout_marginRight="18dp"
        android:layout_marginEnd="18dp" />
    
</RelativeLayout>

③ 活动SuccessActivity(负责登录成功提示页面)

package com.example.androidlogin;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

/*
   登陆成功进入的页面
 */

public class SuccessActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //将正在创建的活动添加到活动管理器中
        ActivityCollector.addActivity(this);
        setContentView(R.layout.success__layout);

 

        TextView username = (TextView)findViewById(R.id.su);

        Intent intent = getIntent();
        String user_name = intent.getStringExtra("userName");
        username.setText("欢迎:"+

user_name);


    }


    //表明一个要销毁的活动从活动管理器里移除
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }

    //创建Option菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }
    //定义菜单响应事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.exit://当点击了退出时,退出程序
                ActivityCollector.finishAll();
                android.os.Process.killProcess(android.os.Process.myPid());
                break;
            default:
        }
        return true;
    }
}

④ 布局文件success_layout

<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/su"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="#2d2e22"
        android:textSize="50dip"/>
</LinearLayout>

⑤ 活动RegistActivity(负责注册界面)

package com.example.androidlogin;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.litepal.LitePal;
import org.litepal.crud.DataSupport;
import org.litepal.tablemanager.Connector;

import java.util.List;

public class RegistActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //将一个正在创建的活动添加到活动管理器中
        ActivityCollector.addActivity(this);
        setContentView(R.layout.regist_layout);

        Button yes = (Button) findViewById(R.id.YES);
        Button no =(Button) findViewById(R.id.NO);

        yes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText username = (EditText)findViewById(R.id.username);
                EditText password = (EditText)findViewById(R.id.password);

                //判断用户注册是否输入了密码和用户名
                //首先学会如何判断EditText中内容为空,要包含trim(去掉首部空格)
                if (username.getText().length()==0||password.getText().length() == 0){
                    Toast.makeText(RegistActivity.this,"用户名和密码不能为空" , Toast.LENGTH_SHORT).show();
                }else {

                    //判断是否已经注册了相同用户名
                    boolean flag = false;
                    List<User> users = DataSupport.findAll(User.class);
                    for(User user : users){
                        if(username.equals(user.getUsername())){
                            flag = true;
                        }
                    }

                    if(flag) {
                        Toast.makeText(RegistActivity.this,"该用户名已经注册",Toast.LENGTH_SHORT).show();
                    }else {
                        //新建LitePal数据库
                        Connector.getDatabase();
                        User user = new User();
                        String strusername=username.getText().toString();
                        String strpassword=password.getText().toString();
                        //存储用户名密码
                        user.setUsername(strusername);
                        user.setPassword(strpassword);
                        user.save();
                        Toast.makeText(RegistActivity.this,"创建用户成功",Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(RegistActivity.this,SuccessActivity.class);
                        startActivity(intent);
                    }



                    }
            }
        });

        no.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(RegistActivity.this,LoginActivity.class);
                startActivity(intent);
            }
        });
    }


    //表明一个要销毁的活动从活动管理器里移除
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }


    //创建Option菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }
    //定义菜单响应事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.exit://当点击了退出时,退出程序
                ActivityCollector.finishAll();
                android.os.Process.killProcess(android.os.Process.myPid());
                break;
            default:
        }
        return true;
    }
}

⑥ 布局文件regist_layout

<?xml version="1.0" encoding="utf-8"?>
<!-- 此Activity采用相对布局 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <!-- TextView相当于Java中的标签组件,下面是对其属性的设置 -->
    <TextView
        android:id="@+id/title"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="注册页面"
        android:textColor="#000"
        android:textSize="30dip"
        android:layout_marginLeft="18dp"
        android:layout_marginStart="18dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="13dp" />

    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:text="用户名"
        android:layout_alignBaseline="@+id/username"
        android:layout_alignBottom="@+id/username"
        android:layout_alignRight="@+id/user_password"
        android:layout_alignEnd="@+id/user_password" />
    <!-- 文本编辑框 -->

    <TextView
        android:id="@+id/user_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:text="密码"
        android:layout_marginRight="33dp"
        android:layout_marginEnd="33dp"
        android:layout_alignBaseline="@+id/password"
        android:layout_alignBottom="@+id/password"
        android:layout_toLeftOf="@+id/password"
        android:layout_toStartOf="@+id/password" />

    <EditText
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:id="@+id/username"
        android:layout_marginTop="31dp"
        android:layout_below="@+id/title"
        android:layout_alignLeft="@+id/password"
        android:layout_alignStart="@+id/password"
        android:maxLines="1"
        android:hint="username"/>
    <!-- maxLines设置EditText最大行数,hint设置提示性文本 -->

    <EditText
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:id="@+id/password"
        android:layout_marginRight="62dp"
        android:layout_marginEnd="62dp"
        android:layout_marginTop="16dp"
        android:layout_below="@+id/username"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:maxLines="1"
        android:hint="password"/>
    <Button

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20dip"
        android:text="确定"
        android:id="@+id/YES"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/user_password"
        android:layout_alignStart="@+id/user_password"
        android:layout_marginLeft="26dp"
        android:layout_marginStart="26dp" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/NO"
        android:textSize="20dip"
        android:text="取消"

        android:layout_alignBaseline="@+id/YES"
        android:layout_alignBottom="@+id/YES"
        android:layout_alignRight="@+id/password"
        android:layout_alignEnd="@+id/password"
        android:layout_marginRight="18dp"
        android:layout_marginEnd="18dp" />
</RelativeLayout>

 

⑦ 菜单menu/main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/exit"
    android:title="退出"/>
</menu>

 

⑧ 活动管理类ActivityCollector

package com.example.androidlogin;

import android.app.Activity;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Enjoy life on 2017/9/24.
 */
public class ActivityCollector {

    public static List<Activity> activities = new ArrayList<>();

    public static void addActivity(Activity activity){
        activities.add(activity);
    }
    public static void removeActivity(Activity activity){
        activities.remove(activity);
    }

    public static void finishAll(){
        for (Activity activity : activities){
            if (!activity.isFinishing()){
                activity.finish();
            }
        }
        activities.clear();
    }
}

 

AndroidManifest.xml

?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidlogin">

    <application
        android:name="org.litepal.LitePalApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".LoginActivity"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SuccessActivity"
            android:launchMode="singleTask"/>
        <activity android:name=".RegistActivity"
            android:launchMode="singleTask"></activity>
    </application>

</manifest>


 

------------------以下代码主要为 LitePal数据库的配置------------------

app/build.gradle中添加对LitePal数据库的支持

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'org.litepal.android:core:1.4.1'

    testCompile 'junit:junit:4.12'
}


main目录下新建一个assets目录,然后在assets目录下再新建一个litepal.xml文件

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="UserInfo"></dbname>

    <version value="1"></version>

    <list>
        <mapping class="com.example.androidlogin.User"></mapping>
    </list>
</litepal>

AndroidMainfest.xml中已经添加

        android:name="org.litepal.LitePalApplication"

④ 新建User类(用来存储用户信息)

package com.example.androidlogin;

import org.litepal.crud.DataSupport;

/**
 * Created by Enjoy life on 2017/10/2.
 */

public class User extends DataSupport{
    private String username;
    private String password;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

 

 

运行结果:

                 

      LoginActivity                                SuccessActivity                       RegistActivity

 

①在登录页面若输入用户名和密码成功进入提示页面(密码错误弹出提示);点击注册进入注册页面(没有用户名密码需先去注册页面创建用户,用户信息保存在数据库中用于下次登录)

                    

      密码错误提示                                           注册信息为空提示

②注册页面输入完用户名和密码点击确定直接进入提示页面,而点击取消则回到登录页面(若输入用户名和密码为空则报错)

      

③在任何一个页面点击Option菜单的退出会直接退出程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值