安卓应用开发——Android Studio中数据库的应用
在软件的运行时我们总要在各个页面中互相跳转,在一些页面中我们也需要回传一些我们的数据,以达成后续数据交互的功能。在生活中的软件,数据库的应用如今变得不可缺少,也更加确定了我们需要学会和灵活运用这一利器。例如我们在购物时在购物页面添加商品到购物车,在后续的购物车界面我们能完整的看到我们添加了哪些东西,这就是我们常说的数据回传。
一、前情提要
在软件的运行时我们总要在各个页面中互相跳转,在一些页面中我们也需要回传一些我们的数据,以达成后续数据交互的功能。在生活中的软件,数据库的应用如今变得不可缺少,也更加确定了我们需要学会和灵活运用这一利器。例如我们在购物时在购物页面添加商品到购物车,在后续的购物车界面我们能完整的看到我们添加了哪些东西,这就是我们常说的数据回传。
今天让我们一起来学习一下数据库的创建、数据增加、删除和查询功能是怎么实现的。
二、简单介绍
我们所用到的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("白玫的博客");
}
});
}
}
本次小功能实现介绍到这,感谢观看完本次小项目开发,点赞加关注是您对我的认可,谢谢支持,再次感谢。
更多推荐
所有评论(0)