一、前情提要

  在软件的运行时我们总要在各个页面中互相跳转,在一些页面中我们也需要回传一些我们的数据,以达成后续数据交互的功能。在生活中的软件,数据库的应用如今变得不可缺少,也更加确定了我们需要学会和灵活运用这一利器。例如我们在购物时在购物页面添加商品到购物车,在后续的购物车界面我们能完整的看到我们添加了哪些东西,这就是我们常说的数据回传。

  今天让我们一起来学习一下数据库的创建、数据增加、删除和查询功能是怎么实现的。

二、简单介绍

  我们所用到的SQLite是 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用,并且在Android Studio无需安装和连接,可以直接就用,大大增加了简便性。

 三、依赖包安装

  为了节约我们写项目的时间,我把所需的依赖包直接打在下面,想具体了解的同学可以点开括号里面的链接去进行更完善的了解,这里不过多的进行介绍。(https://github.com/greenrobot/EventBus

依赖包:

implementation("org.greenrobot:eventbus:3.3.1")

安装步骤:

1.找到以下图片的文件位置,我这里项目取名了eventbus。

(在文件目录GradleScripts中找到自己项目对应的文件即可)

GradleScripts通常在文件目录最后一页。

 2.将依赖包代码在文件最后一行复制粘贴进去即可。

四、简单思路

 本次功能设计需要两个页面,在工程开始之前提前为页面取好简单易懂的名字即可,方便后续查看。(本次设计主页面我们取名为MainActivity、MainActivity2,外加一个数据库创建的java文件)

1.主页面设计  →  2.按钮布局(注意水平垂直约束)  →  3.数据库创建  →  4.各功能实现 

 本次工程项目我们准备实现数据库中数据回传,数据增加、删除、查询功能。

五、代码实现

因为本次设计主要介绍提讲JAVA的代码实现,所以设计界面因个人喜好扩展和设计,本次介绍页面采用简洁设计。

 1.主页面设计以及按钮的布局
(MainActivity)效果图:

本期我们的页面沿用上期的页面,在此页面的基础上进行调整。

代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="跳转"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="150dp"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:srcCompat="@drawable/img" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="108dp"
        android:text="位移动画"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.201"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="108dp"
        android:text="透明动画"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/button1"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="缩放动画"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.201"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button1" />

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="旋转动画"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.496"
        app:layout_constraintStart_toEndOf="@+id/button3"
        app:layout_constraintTop_toBottomOf="@+id/button4" />

    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="256dp"
        android:text="组合动画"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button14"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="328dp"
        android:text="增加"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.503"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button15"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button14" />

    <Button
        android:id="@+id/button16"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button15" />

    <Button
        android:id="@+id/button17"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button16" />

</androidx.constraintlayout.widget.ConstraintLayout>
(MainActivity2)效果图: 

 

代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
 2.数据库创建 
DBtools文件的创建

我们需要新建一个JAVA文件,并在其中创建数据库。(这里我给这个JAVA文件取DBtools)

代码:

package com.hnucm.eventbus;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class DBtools extends SQLiteOpenHelper {
    public DBtools(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建数据库表
        db.execSQL("create table user(id integer primary key autoincrement,username varchar(20),age integer)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //更新数据库表
    }
}
3. 各功能实现 
(MainActivity)功能实现

 代码:

package com.hnucm.eventbus;

import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.animation.ValueAnimator;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends AppCompatActivity {
TextView  textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        EventBus.getDefault().register(this);
        //注册
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转
                Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                startActivity(intent);
            }
        });
        ImageView imageView = findViewById(R.id.imageView);
        findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //位移动画
                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView,"translationX",0,500);
                //移动像素点从0到500,也可以传多个参数(0,500,-500)
                objectAnimator.setDuration(3000);
                //三秒
                objectAnimator.start();
            }
        });
        findViewById(R.id.button4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //透明度动画
                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView,"alpha",1,0,1);
                //透明度
                objectAnimator.setDuration(3000);
                //三秒
                objectAnimator.start();
            }
        });
        findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //缩放动画
                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView,"scaleX",1,0,2);
                //缩放倍数
                objectAnimator.setDuration(3000);
                //三秒
                objectAnimator.setRepeatCount(10);
                //执行次数100次数
                //循环执行objectAnimator.setRepeatMode(ValueAnimator.RESTART);
                objectAnimator.start();
            }
        });
        findViewById(R.id.button5).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //旋转动画
                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView,"rotation",0,180);
                //旋转角度从0到100
                objectAnimator.setDuration(3000);
                //三秒
                objectAnimator.setRepeatCount(10);
                //执行次数100次数
                //循环执行objectAnimator.setRepeatMode(ValueAnimator.RESTART);
                objectAnimator.start();
            }
        });
        findViewById(R.id.button6).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //组合动画  缩放+透明度变化
                PropertyValuesHolder propertyValuesHolder = PropertyValuesHolder.ofFloat("scaleX",0,2);
                PropertyValuesHolder propertyValuesHolder2 = PropertyValuesHolder.ofFloat("scaleY",0,2);
                PropertyValuesHolder propertyValuesHolder3 = PropertyValuesHolder.ofFloat("alpha",1,0);
                ValueAnimator valueAnimator = ObjectAnimator.ofPropertyValuesHolder(imageView,
                        propertyValuesHolder,propertyValuesHolder2,propertyValuesHolder3);
                valueAnimator.setDuration(1000);
                valueAnimator.start();
            }
        });
        findViewById(R.id.button14).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //增加
               DBtools dBtools = new DBtools(MainActivity.this,"text2",null,1);
               SQLiteDatabase sqLiteDatabase = dBtools.getWritableDatabase();
                ContentValues contentValues = new ContentValues();
                contentValues.put("username","test1");
                contentValues.put("age",20);
               sqLiteDatabase.insert("user",null,contentValues);
            }
        });
        findViewById(R.id.button15).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //查询
                DBtools dBtools = new DBtools(MainActivity.this,"text2",null,1);
                SQLiteDatabase sqLiteDatabase = dBtools.getWritableDatabase();
                //select * from user where username = test1
                Cursor cursor = sqLiteDatabase.query("user",new String[]{"id","username","age"},
                        "username=?",new String[]{"test1"},null,null,null);
                //指针默认指向表头,用cursor方法指向第一行
                while (cursor.moveToNext()) {//移动到第一行
                    int id = cursor.getInt(cursor.getColumnIndex("id"));
                    int age = cursor.getInt(cursor.getColumnIndex("age"));
                    String username = cursor.getString(cursor.getColumnIndex("username"));
                    Log.i("test", id + username + age);
                    //通过循环连续获取
                }
            }
        });
        findViewById(R.id.button16).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //删除
                DBtools dBtools = new DBtools(MainActivity.this,"text2",null,1);
                SQLiteDatabase sqLiteDatabase = dBtools.getWritableDatabase();
                sqLiteDatabase.delete("user","id=?",new String[]{"1"});
            }
        });
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void test(String msg) {
        Log.i("test", msg);
        //对文本进行绑定回传
        textView.setText(msg);
    }
}
(MainActivity2)功能实现

 代码:

package com.hnucm.eventbus;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import org.greenrobot.eventbus.EventBus;

public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
       //发送数据给activity
        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //给其他的活动的activity或fragment发送数据
                EventBus.getDefault().post("白玫的博客");
            }
        });
    }
}

 本次小功能实现介绍到这,感谢观看完本次小项目开发,点赞加关注是您对我的认可,谢谢支持,再次感谢。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐