android使用内置sqlite实现简单的登录注册功能

首先本文使用的是android自带的一个数据库表,所以说要使用查询表的功能,引入以下文件

MySQLiteOpenHelper.java
public class MySQLiteOpenHelper extends SQLiteOpenHelper {

       private SQLiteDatabase sqLiteDatabase;

    public static final String CREATE_USER="create table user(" +
            "id integer primary key autoincrement," +
            "name text," +
            "username text," +
            "password text," +
            "sj text)";
    public MySQLiteOpenHelper(@Nullable Context context) {
      super(context,"user",null,1);
      this.context=context;
    }


    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
      sqLiteDatabase.execSQL(CREATE_USER);
      sqLiteDatabase.execSQL(CREATE_CONTEXT);
        Toast.makeText(context, "创建成功", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
这样就算是成功创建我们的表user了,然后可以进行下面的注册和登录操作(就是简单的增加和查询)。

注册

  1. 创建一个布局文件来显示注册表单,该布局应包含输入用户名、电子邮件和密码的EditText视图组件以及注册按钮。
  2. 在Java文件中,通过findViewById()方法将EditText组件与代码关联,并使用getText()方法来获取用户输入的文本。
  3. 处理输入验证:你需要验证用户名是否唯一,邮箱是否有效,密码是否符合要求(大写字母、小写字母、数字、特殊字符等)。如果有任何问题,请向用户发出相应警告。
  4. 将表单数据保存在本地数据库或服务器上。

          后端代码

  1. public class register extends AppCompatActivity implements View.OnClickListener {
        private MySQLiteOpenHelper mySQLiteOpenHelper;
        private SQLiteDatabase sqLiteDatabase;
        private EditText username, name, password, affirm, sj;
        private Button register;
    
        User user = new User();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_register);
            setTitle("注册");
            username = findViewById(R.id.re_username);
            username.setOnClickListener(this);
            password = findViewById(R.id.re_password);
            password.setOnClickListener(this);
            name = findViewById(R.id.re_name);
            name.setOnClickListener(this);
            affirm = findViewById(R.id.re_affirm);
            affirm.setOnClickListener(this);
            sj = findViewById(R.id.re_sj);
            sj.setOnClickListener(this);
            register = findViewById(R.id.re_register);
            register.setOnClickListener(this);
            initData();
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.re_register:
                    insert();
    
                    break;
            }
        }
    
        private void initData() {
            mySQLiteOpenHelper = new MySQLiteOpenHelper(this);
            sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase();
    
        }
    
        private void insert() {
    //        submit();
            Boolean submit_flag=submit();
            if (!submit_flag){
                return ;
            }else{
                String User=user.getUsername();
                Cursor cursor=sqLiteDatabase.query("user",null,"username=?",new String[]{User},null,null,null);
                if(cursor.moveToFirst()){
                    Toast.makeText(this, "用户名已存在", Toast.LENGTH_SHORT).show();
                }else {
            ContentValues mContentValues = new ContentValues();
            mContentValues.put("name", user.getName());
            mContentValues.put("username", user.getUsername());
            mContentValues.put("password", user.getPassword());
            mContentValues.put("sj", user.getSj());
            long result = sqLiteDatabase.insert("user", null, mContentValues);
            sqLiteDatabase.close();
            if (result != -1) {
                Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show();
                Intent mIntent = new Intent(register.this, MainActivity.class);
                startActivity(mIntent);
    //            注册成功后,提交按钮置灰不可连续调用
    //            register.setClickable(false);
    //            register.setBackgroundColor(Color.GRAY);
            } else {
                Toast.makeText(this, "注册失败", Toast.LENGTH_SHORT).show();
                return;
            }
                }
        }
    
        }
    
        private boolean submit() {
            String mUsername = username.getText().toString().trim();
            if (TextUtils.isEmpty(mUsername)) {
                Toast.makeText(this, "请输入账号", Toast.LENGTH_SHORT).show();
                return false;
            }
            String mPassword = password.getText().toString().trim();
    
            if (TextUtils.isEmpty(mPassword)) {
                Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
                return false;
            }
            String mAffirm = affirm.getText().toString().trim();
            if (TextUtils.isEmpty(mAffirm)) {
                Toast.makeText(this, "请确认密码", Toast.LENGTH_SHORT).show();
                return false;
            }
            String mName = name.getText().toString().trim();
            if (TextUtils.isEmpty(mName)) {
                Toast.makeText(this, "请输入名称", Toast.LENGTH_SHORT).show();
                return false;
            }
            String msj = sj.getText().toString().trim();
            if (TextUtils.isEmpty(msj)) {
                Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show();
                return false;
            }
    
            user.setUsername(mUsername);
            user.setName(mName);
            user.setPassword(mPassword);
            user.setSj(msj);
            return true;
    
    
        }
    }
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:orientation="vertical">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="60dp"
                android:textSize="36dp"
                android:gravity="center"
                android:text="注册"
                />
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="80dp"
                android:layout_marginRight="20dp"
                android:orientation="vertical">
    
                <EditText
                    android:id="@+id/re_username"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawablePadding="5dp"
                    android:hint="请输入账号"
                    android:maxLines="1" />
    
                <EditText
                    android:id="@+id/re_password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:drawablePadding="5dp"
                    android:hint="请输入密码"
                    android:inputType="textPassword"
                    android:maxLines="1" />
    
                <EditText
                    android:id="@+id/re_affirm"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:drawablePadding="5dp"
                    android:hint="请确认密码"
                    android:inputType="textPassword"
                    android:maxLines="1" />
                <EditText
                    android:id="@+id/re_name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:drawablePadding="5dp"
                    android:hint="请确认输入姓名"
                    android:inputType="none"
                    android:maxLines="1" />
                <EditText
                    android:id="@+id/re_sj"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:drawablePadding="5dp"
                    android:hint="请确认输入手机号"
                    android:inputType="number"
                    android:maxLines="1" />
    
                <Button
                    android:id="@+id/re_register"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="40dp"
                    android:text="注册"
                    android:textSize="18sp" />
            </LinearLayout>
    
        </LinearLayout>

  2. 创建另一个布局文件来显示登录表单,该布局应包含输入电子邮件和密码的EditText视图组件以及登录按钮。以下是效果图和代码:

  前端:

 <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="80dp"
        android:textSize="36dp"
        android:gravity="center"
        android:text="登录"
        />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp">

        <EditText
            android:id="@+id/lg_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:drawablePadding="5dp"
            android:hint="账号"
            android:maxLines="1"/>

        <EditText
            android:id="@+id/lg_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/lg_username"
            android:layout_marginTop="10dp"

            android:drawablePadding="5dp"
            android:hint="密码"
            android:maxLines="1"
            android:inputType="textPassword"/>

        <LinearLayout
            android:id="@+id/ly"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/lg_password">

            <CheckBox
                android:id="@+id/lg_rememberPsd"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="5"
                android:text="记住密码"
              />

            <TextView
                android:id="@+id/lg_forgetPsd"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="忘记密码"
              />

        </LinearLayout>

        <Button
            android:id="@+id/lg_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/ly"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="30dp"
            android:text="登录"
            android:textSize="18sp"
         />


    </RelativeLayout>

    <TextView
        android:id="@+id/lg_register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="9dp"
        android:layout_gravity="right"
        android:onClick="register"
        android:layout_marginRight="20dp"
        android:text="没有账号?立即注册"
 />

  1. 获取用户输入-获取用户输入的用户名和密码。
  2. 检查凭据-检查提供的凭据是否与数据库中保存的凭据匹配。
  3. 登录用户-如果凭据是有效的,则将用户登录到应用程序,否则提示他们输入正确的用户名和密码。
  4.  @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setTitle("登录");// 修改标题头
            
            setContentView(R.layout.activity_main);
            username = findViewById(R.id.lg_username);
            username.setOnClickListener(this);
            password = findViewById(R.id.lg_password);
            password.setOnClickListener(this);
            login = findViewById(R.id.lg_login);
            login.setOnClickListener(this);
            register = findViewById(R.id.lg_register);
            register.setOnClickListener(this);
            initData();
        }
    
    
        private void initData() {
            mySQLiteOpenHelper = new MySQLiteOpenHelper(this);
            sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase();
    
        }
    
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.lg_login:
                    Login();
                    break;
                case R.id.lg_register:
                    Intent mIntent = new Intent(MainActivity.this, register.class);
                    startActivity(mIntent);
                    break;
            }
        }
    
        public void Login() {
            String mUsername = username.getText().toString().trim();
            String mPassword = password.getText().toString().trim();
            //定义查询字段
            String[] up = {"username", "password","name","sj","id"};
            //定义查询条件
            String up_and = "username=?AND password=?";
            //定义查询变量
            String[] ArgUp = {mUsername, mPassword};
            //cursor对象每行数据的集合
    //        Cursor cursor = sqLiteDatabase.query("user",new String[]{"username","password"}, "username=?AND password=?",new String[]{mUsername,mPassword},null,null,null,"1");
            Cursor cursor = sqLiteDatabase.query("user",null,
                    up_and, ArgUp, null, null, null, "1");
            System.out.print(cursor);
            if(TextUtils.isEmpty(mPassword)&&TextUtils.isEmpty(mUsername)){
                Toast.makeText(this, "请输入账号密码", Toast.LENGTH_SHORT).show();
                return;
            }
            if(TextUtils.isEmpty(mPassword)){
                Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
                return;
            }
            if(TextUtils.isEmpty(mUsername)){
                Toast.makeText(this, "请输入账号", Toast.LENGTH_SHORT).show();
                return;
            }
    //         cursor.moveToFirst()方法将光标移动到第一行。它允许执行查询是否返回空集的测试
            if ( cursor.moveToFirst()) {
                Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
                //数据传送 选择传送那些数据
                int value1 = cursor.getColumnIndex("username");
                int value2 = cursor.getColumnIndex("name");
                int value3 = cursor.getColumnIndex("sj");
                int value4 = cursor.getColumnIndex("password");
                int value5=cursor.getColumnIndex("id");
            
                String name = cursor.getString(value2);
                mPassword=cursor.getString(value4);
                String sj=cursor.getString(value3);
                String id=cursor.getString(value5);
                Intent mIntent = new Intent(MainActivity.this, WeixinActivity.class);
                mIntent.putExtra("姓名",name);
                mIntent.putExtra("账号", mUsername);
                mIntent.putExtra("密码", mPassword);
                mIntent.putExtra("手机", sj);
                mIntent.putExtra("id",id);
                startActivity(mIntent);
                //结束一个Activity的生命周期
                finish();
            } else {
                Toast.makeText(this, "密码不正确", Toast.LENGTH_SHORT).show();
                return;
            }
            //关闭查询
            cursor.close();
            //关闭数据库连接
            sqLiteDatabase.close();
    
    
        }
    

    整体的登录方法就是一个sql查询,将你登录的信息获取到,然后使用sql语句查询出当前用户是否存在。

若要实现这些功能,需要了解 Android 应用程序架构及其组成部分。 此外,还需要学习 SQLite 数据库以及如何在 Android 应用程序中进行持久化存储。 通常,可以使用 Android Studio 这样的集成开发环境来快速创建一个安卓应用程序并进行调试和测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现收藏功能,需要使用Android Studio中内置SQLite数据库来存储用户收藏的数据。下面是一个简单实现步骤: 1. 创建数据库表 在SQLite数据库中创建一个收藏表,其中包含收藏的id、名称、描述和图片等字段。可以使用以下代码创建表: ```java public class DBHelper extends SQLiteOpenHelper { private static final int DB_VERSION = 1; private static final String DB_NAME = "my_database"; private static final String TABLE_NAME = "favorites"; private static final String KEY_ID = "id"; private static final String KEY_NAME = "name"; private static final String KEY_DESCRIPTION = "description"; private static final String KEY_IMAGE = "image"; private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + KEY_DESCRIPTION + " TEXT," + KEY_IMAGE + " BLOB" + ")"; public DBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } ``` 2. 实现添加收藏 在用户点击“添加收藏”按钮时,将用户收藏数据插入到SQLite数据库中。可以使用以下代码实现: ```java public class FavoritesActivity extends AppCompatActivity { private EditText mNameEditText; private EditText mDescriptionEditText; private ImageView mImageView; private byte[] mImageBytes; private DBHelper mDBHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_favorites); mNameEditText = findViewById(R.id.name_edit_text); mDescriptionEditText = findViewById(R.id.description_edit_text); mImageView = findViewById(R.id.image_view); mDBHelper = new DBHelper(this); } public void onAddFavoriteClick(View view) { String name = mNameEditText.getText().toString(); String description = mDescriptionEditText.getText().toString(); // 插入数据到数据库中 SQLiteDatabase db = mDBHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(DBHelper.KEY_NAME, name); values.put(DBHelper.KEY_DESCRIPTION, description); values.put(DBHelper.KEY_IMAGE, mImageBytes); db.insert(DBHelper.TABLE_NAME, null, values); Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show(); finish(); } public void onImageClick(View view) { // 选择图片 Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK && data != null) { // 获取选择的图片 Uri uri = data.getData(); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); mImageView.setImageBitmap(bitmap); // 将图片转换为字节数组 ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); mImageBytes = baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 3. 实现查询收藏 在用户进入“我的收藏”页面时,从SQLite数据库中查询出所有收藏的数据并显示到RecyclerView中。可以使用以下代码实现: ```java public class MyFavoritesActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private FavoritesAdapter mAdapter; private List<FavoriteItem> mFavoriteItems = new ArrayList<>(); private DBHelper mDBHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_favorites); mRecyclerView = findViewById(R.id.recycler_view); mAdapter = new FavoritesAdapter(mFavoriteItems); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.setAdapter(mAdapter); mDBHelper = new DBHelper(this); // 查询数据库中的数据 SQLiteDatabase db = mDBHelper.getReadableDatabase(); Cursor cursor = db.query(DBHelper.TABLE_NAME, null, null, null, null, null, null); if (cursor.moveToFirst()) { do { int id = cursor.getInt(cursor.getColumnIndex(DBHelper.KEY_ID)); String name = cursor.getString(cursor.getColumnIndex(DBHelper.KEY_NAME)); String description = cursor.getString(cursor.getColumnIndex(DBHelper.KEY_DESCRIPTION)); byte[] imageBytes = cursor.getBlob(cursor.getColumnIndex(DBHelper.KEY_IMAGE)); // 将查询到的数据添加到列表中 FavoriteItem item = new FavoriteItem(id, name, description, imageBytes); mFavoriteItems.add(item); } while (cursor.moveToNext()); } mAdapter.notifyDataSetChanged(); } private class FavoritesAdapter extends RecyclerView.Adapter<FavoritesAdapter.ViewHolder> { private List<FavoriteItem> mItems; public FavoritesAdapter(List<FavoriteItem> items) { mItems = items; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_favorite, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { FavoriteItem item = mItems.get(position); holder.mNameTextView.setText(item.getName()); holder.mDescriptionTextView.setText(item.getDescription()); if (item.getImageBytes() != null) { Bitmap bitmap = BitmapFactory.decodeByteArray(item.getImageBytes(), 0, item.getImageBytes().length); holder.mImageView.setImageBitmap(bitmap); } } @Override public int getItemCount() { return mItems.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private TextView mNameTextView; private TextView mDescriptionTextView; private ImageView mImageView; public ViewHolder(@NonNull View itemView) { super(itemView); mNameTextView = itemView.findViewById(R.id.name_text_view); mDescriptionTextView = itemView.findViewById(R.id.description_text_view); mImageView = itemView.findViewById(R.id.image_view); } } } } ``` 以上就是使用Android Studio内置SQLite数据库实现收藏功能的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值