使用效果:感觉比MySqlite简单一些
内容包含:增、删、查(改和增差不多,只要id是一样,就默认为修改)
ObjectBox 添加数据
ObjectBox 随机添加
ObjectBox 模糊查询
ObjectBox 匹配查询
ObjectBox 查询全部
ObjectBox 删除全部
ObjectBox 分页查询
其中代码里 ViewBinding 不懂的,可以查看:ViewBinding 初探-在Activity和Adapter中使用_thiscopy的博客-CSDN博客

- // Top-level build file where you can add configuration options common to all sub-projects/modules.
- buildscript {
- //ObjectBox 相关
- ext.objectboxVersion = "3.2.1"
- repositories {
- google()
- jcenter()
- //ObjectBox 相关
- mavenCentral()
- }
- dependencies {
- classpath "com.android.tools.build:gradle:4.0.1"
- //ObjectBox 相关
- classpath("io.objectbox:objectbox-gradle-plugin:$objectboxVersion")
- }
- }
-
- allprojects {
- repositories {
- google()
- jcenter()
- }
- }
-
- task clean(type: Delete) {
- delete rootProject.buildDir
- }
注意:apply plugin: "io.objectbox" 须要添加到 dependencies 后面
- apply plugin: 'com.android.application'
-
- android {
- compileSdkVersion 32
- buildToolsVersion "32.0.0"
-
- defaultConfig {
- applicationId "com.xolo.myobjectbox"
- minSdkVersion 16
- targetSdkVersion 32
- versionCode 1
- versionName "1.0"
-
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
- }
-
- buildFeatures {
- viewBinding = true
- }
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
- }
-
- dependencies {
- implementation fileTree(dir: "libs", include: ["*.jar"])
- implementation 'androidx.appcompat:appcompat:1.3.1'
- implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
-
- //ButterKnife
- /*implementation 'com.jakewharton:butterknife:10.2.3'
- annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'*/
-
- //RecyclerView 列表
- implementation 'androidx.recyclerview:recyclerview:1.2.0-beta01'
-
- //SmartRefreshLayout 下拉刷新 上拉加载
- implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.4-7'
- implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.4-7'
- }
-
- //ObjectBox 相关
- apply plugin: "io.objectbox" // Add after other plugins.
- <LinearLayout 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:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- tools:context=".MainActivity">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <EditText
- android:id="@+id/etName"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="名称"
- android:textColor="#000000"
- android:textSize="18sp" />
-
- <EditText
- android:id="@+id/etAge"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="年龄"
- android:inputType="number"
- android:textColor="#000000"
- android:textSize="18sp" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <Button
- android:id="@+id/btnAdd"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:text="添加" />
- <Button
- android:id="@+id/btnQuery"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- android:text="查询" />
-
-
- LinearLayout>
-
-
- LinearLayout>
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:background="#D9F8F5"
- android:gravity="center|left"
- android:paddingLeft="20dp"
- android:text="数据列表-点击可删、下拉刷新、上拉加载"
- android:textColor="#000000"
- android:textSize="18sp" />
-
- <com.scwang.smartrefresh.layout.SmartRefreshLayout
- android:id="@+id/srlControl"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- app:srlAccentColor="#00000000"
- app:srlEnablePreviewInEditMode="true"
- app:srlPrimaryColor="#00000000">
-
- <com.scwang.smartrefresh.layout.header.ClassicsHeader
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- <androidx.recyclerview.widget.RecyclerView
- android:id="@+id/rvData"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
- <com.scwang.smartrefresh.layout.footer.ClassicsFooter
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- com.scwang.smartrefresh.layout.SmartRefreshLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <Button
- android:id="@+id/btnRandomFill"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:text="随机填充 100 条" />
- <Button
- android:id="@+id/btnDel"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- android:text="删除全部" />
-
-
- LinearLayout>
-
-
- LinearLayout>
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.recyclerview.widget.GridLayoutManager;
-
- import android.os.Bundle;
- import android.widget.Toast;
-
- import com.scwang.smartrefresh.layout.header.BezierRadarHeader;
- import com.xolo.myobjectbox.databinding.ActivityMainBinding;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import io.objectbox.Box;
- import io.objectbox.query.Query;
- import io.objectbox.query.QueryBuilder;
-
- public class MainActivity extends AppCompatActivity {
-
- //系统依据 activity_main.xml 自动生成的 ActivityMainBinding 类,通过 ActivityMainBinding 可以获取对应的控件
- ActivityMainBinding mainBinding;
-
- private StudentAdapter studentAdapter;
- private List
list; -
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //setContentView(R.layout.activity_main); -需要注释掉
- //加载界面
- mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
- setContentView(mainBinding.getRoot());
-
- //获取数据表对象
- Box
studentModelBox = MyObjectBoxApplication.getBoxStore().boxFor(StudentModel.class); -
- //添加StudentAdapter适配器
- list = new ArrayList<>();
- studentAdapter = new StudentAdapter(this, list, o -> {
- studentModelBox.remove(list.get((int)o));
- list.remove((int)o);
- studentAdapter.notifyDataSetChanged();
- Toasts("删除成功");
- });
- mainBinding.rvData.setLayoutManager(new GridLayoutManager(this, 1));
- mainBinding.rvData.setNestedScrollingEnabled(true);
- mainBinding.rvData.setAdapter(studentAdapter);
-
- //添加点击事件
- mainBinding.btnAdd.setOnClickListener(v -> {
- String name = mainBinding.etName.getText().toString();
- String age = mainBinding.etAge.getText().toString();
- StudentModel studentModel = new StudentModel(name, age);
- //添加进入数据库
- studentModelBox.put(studentModel);
- list.add(0, studentModel);
- studentAdapter.notifyDataSetChanged();
- Toasts("添加成功");
- //清空输入框
- mainBinding.etName.setText("");
- mainBinding.etAge.setText("");
- });
-
- //点击查询
- mainBinding.btnQuery.setOnClickListener(v -> {
- String name = mainBinding.etName.getText().toString();
- String age = mainBinding.etAge.getText().toString();
-
- //模糊查询
- list.clear();
- Query
query = studentModelBox.query() - //匹配查询用 equal
- //.equal(StudentModel_.name, name, QueryBuilder.StringOrder.CASE_INSENSITIVE)
- //.equal(StudentModel_.age, age, QueryBuilder.StringOrder.CASE_INSENSITIVE)
- //模糊查询用 contains
- .contains(StudentModel_.name, name, QueryBuilder.StringOrder.CASE_INSENSITIVE)
- .contains(StudentModel_.age, age, QueryBuilder.StringOrder.CASE_INSENSITIVE)
- .build();
- list.addAll(query.find(list.size(), 2));
-
- //查询全部数据
- //list.addAll(studentModelBox.getAll());
-
- studentAdapter.notifyDataSetChanged();
-
- Toasts("查询成功");
- });
-
- //删除全部
- mainBinding.btnDel.setOnClickListener(v -> {
- //清空界面
- list.clear();
- studentAdapter.notifyDataSetChanged();
- //删除全部条码
- studentModelBox.removeAll();
- });
-
- //随机填充 100 条数据
- mainBinding.btnRandomFill.setOnClickListener(v -> {
- for(int i=0;i<100;i++){
- //添加进入数据库-随机生成姓名和年龄
- studentModelBox.put(new StudentModel(RandomWordUtils.randomWord(), String.valueOf((int)(Math.random()*100 + 1))));
- }
- Toasts("添加成功");
- });
-
-
- //下拉刷新
- mainBinding.srlControl.setRefreshHeader(new BezierRadarHeader(getApplicationContext()).setEnableHorizontalDrag(true));
- mainBinding.srlControl.setOnRefreshListener(refreshLayout -> {
- //启用刷新动画
- mainBinding.srlControl.setEnableRefresh(true);
-
- //查询第一条-从第 list.size() 条开始查,一次查10条,这里经过 list.clear() ,所以 list.size() 为 0
- list.clear();
- Query
query = studentModelBox.query().build(); - list.addAll(query.find(list.size(), 10));
- studentAdapter.notifyDataSetChanged();
-
- //结束刷新动画
- mainBinding.srlControl.finishRefresh();
- });
- //上拉加载
- mainBinding.srlControl.setOnLoadmoreListener(refreshLayout -> {
- //启用加载动画
- mainBinding.srlControl.setEnableLoadmore(true);
-
- //分页查询-从第 list.size() 条开始查,一次查10条
- Query
query = studentModelBox.query().build(); - list.addAll(query.find(list.size(), 10));
- studentAdapter.notifyDataSetChanged();
-
- //结束加载动画
- mainBinding.srlControl.finishLoadmore();
- });
-
- }
-
- //Toast
- public void Toasts(String content){
- Toast.makeText(MyObjectBoxApplication.getMyObjectBoxApplication(), content, Toast.LENGTH_SHORT).show();
- }
-
- }
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="5dp"
- android:background="#FFFFFF"
- android:layout_marginBottom="1dp"
- android:id="@+id/llClick">
-
- <TextView
- android:id="@+id/tvId"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="ID:"
- android:textColor="#000000"
- android:textSize="18sp" />
-
- <TextView
- android:id="@+id/tvName"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="name:"
- android:textColor="#000000"
- android:textSize="18sp" />
-
- <TextView
- android:id="@+id/tvAge"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="age:"
- android:textColor="#000000"
- android:textSize="18sp" />
-
-
- LinearLayout>
- import android.annotation.SuppressLint;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.ViewGroup;
-
- import androidx.annotation.NonNull;
- import androidx.recyclerview.widget.RecyclerView;
-
- import com.xolo.myobjectbox.databinding.AdapterStudentBinding;
-
- import java.util.List;
-
- public class StudentAdapter extends RecyclerView.Adapter
.ViewHolder> { -
- private Context context;
- private List<StudentModel> list;
- private ClickInterface clickInterface;
-
- public StudentAdapter(Context context, List<StudentModel> list, ClickInterface clickInterface) {
- this.context = context;
- this.list = list;
- this.clickInterface = clickInterface;
- }
-
- @NonNull
- @Override
- public StudentAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- //界面设置
- AdapterStudentBinding studentBinding = AdapterStudentBinding.inflate(LayoutInflater.from(context), parent, false);
- return new ViewHolder(studentBinding);
- }
-
- @SuppressLint("SetTextI18n")
- @Override
- public void onBindViewHolder(@NonNull StudentAdapter.ViewHolder holder, int position) {
- holder.studentBinding.tvId.setText("ID:"+list.get(position).getId());
- holder.studentBinding.tvName.setText("姓名:"+list.get(position).getName());
- holder.studentBinding.tvAge.setText("年龄:"+list.get(position).getAge());
- holder.studentBinding.llClick.setOnClickListener(v -> clickInterface.ClickOnThe(position));
- }
-
- @Override
- public int getItemCount() {
- return list.size();
- }
-
- public class ViewHolder extends RecyclerView.ViewHolder {
- 系统依据 activity_main.xml 自动生成的 AdapterStudentBinding 类,通过 ActivityMainBinding 可以获取对应的控件
- AdapterStudentBinding studentBinding;
- public ViewHolder(@NonNull AdapterStudentBinding itemView) {
- super(itemView.getRoot());
- studentBinding = itemView;
- }
- }
- }
- //随机生成英文串串
- public class RandomWordUtils {
-
- public static String randomWord() {
- int length = 12 + (int) (Math.random() * 9);
- String word = "";
- for (int i = 0; i < length; i++) {
- word += (char) randomChar();
- }
- return word;
- }
-
- private static byte randomChar() {
- int flag = (int) (Math.random() * 2);// 0小写字母1大写字母
- byte resultBt;
- if (flag == 0) {
- byte bt = (byte) (Math.random() * 26);// 0 <= bt < 26
- resultBt = (byte) (65 + bt);
- } else {
- byte bt = (byte) (Math.random() * 26);// 0 <= bt < 26
- resultBt = (byte) (97 + bt);
- }
- return resultBt;
- }
- }
注意事项:ObjectBox 需要创建任意一个 @Entity class 否则会一直提示找不到MyObjectBox
需要rebuild project 项目,此时就可以在Application下使用MyObjectBox了
- import io.objectbox.annotation.Entity;
- import io.objectbox.annotation.Id;
-
- //ObjectBox 需要创建任意一个 @Entity class 否则会一直提示找不到MyObjectBox
- //需要rebuild project 项目,此时就可以在Application下使用MyObjectBox了
- @Entity
- public class StudentModel {
-
- //@Id 也是 ObjectBox 必须添加的
- @Id
- private long id;
- private String name;
- private String age;
-
- public StudentModel() {
- }
-
- public StudentModel(String name, String age) {
- this.name = name;
- this.age = age;
- }
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getAge() {
- return age;
- }
-
- public void setAge(String age) {
- this.age = age;
- }
- }
- import android.app.Application;
- import android.util.Log;
-
-
- import io.objectbox.BoxStore;
- import io.objectbox.android.AndroidObjectBrowser;
-
- public class MyObjectBoxApplication extends Application {
-
- private static BoxStore boxStore;
- private static MyObjectBoxApplication myObjectBoxApplication;
-
- @Override
- public void onCreate() {
- super.onCreate();
-
- myObjectBoxApplication = this;
-
- //初始化 ObjectBox
- boxStore = MyObjectBox.builder().androidContext(MyObjectBoxApplication.this).build();
- if (BuildConfig.DEBUG) {
- new AndroidObjectBrowser(boxStore).start(this);
- }
-
- Log.d("App", "Using ObjectBox " + BoxStore.getVersion() + " (" + BoxStore.getVersionNative() + ")");
- }
-
- public static MyObjectBoxApplication getMyObjectBoxApplication() {
- return myObjectBoxApplication;
- }
-
- public static BoxStore getBoxStore() {
- return boxStore;
- }
- }
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.xolo.myobjectbox">
-
- <application
- android:name=".MyObjectBoxApplication"
- 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=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
-
- <category android:name="android.intent.category.LAUNCHER" />
- intent-filter>
- activity>
- application>
-
- manifest>
- public interface ClickInterface {
- void ClickOnThe(Object o);
- }
