Android Realm相关操作

本文详细介绍了如何使用Realm数据库替代SQL,包括其特点、配置方法、类的创建、数据库操作及示例代码,展示了Realm的易用性和高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写了2天的代码,总结一下这两天的一些积累
realm简单来说就是一个可以代替sql的数据库, 特点:易用,快速,跨平台,专业(支持加密,格式化查询,易于移植,支持JSON,流式api,数据变更通知), 可视化

官方网站 https://realm.io/docs/java/latest/ 有需要的朋友,可以去看看
代码:

1、配置
在最外面的那层build.gradle 配置这一段代码

 	  classpath "io.realm:realm-gradle-plugin:5.8.0"

这个是配置Realm的第一步

然后在app文件里面的build.gradle 配置这一段代码

 	  apply plugin: 'realm-android'

配置Realm的第一步

1、布局
布局

3、代码
3.1创建一个需要保存数据库的类,我写了两个

 import io.realm.RealmObject;

/**
 * @author Admin
 * https://realm.io/docs/java/latest/
 */
public class Dog extends RealmObject {

    String name;
    String age;
    String aihao;


    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;
    }
    public String getAihao() {
        return aihao;
    }

    public void setAihao(String aihao) {
        this.aihao = aihao;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", aihao='" + aihao + '\'' +
                '}';
    }
}
 	
import io.realm.RealmList;
import io.realm.RealmObject;
/**
 * @author Admin
 * https://realm.io/docs/java/latest/
 */
public class MyRealmDemo extends RealmObject {

    String userName;
    String pwd;
    Long sessionId;
    private RealmList<Integer> Remarks = new RealmList<>();

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public Long getSessionId() {
        return sessionId;
    }

    public void setSessionId(Long sessionId) {
        this.sessionId = sessionId;
    }

    public RealmList<Integer> getRemarks() {
        return Remarks;
    }

    public void setRemarks(RealmList<Integer> remarks) {
        Remarks = remarks;
    }


    @Override
    public String toString() {
        return "MyRealmDemo{" +
                "userName='" + userName + '\'' +
                ", pwd='" + pwd + '\'' +
                ", sessionId=" + sessionId +
                ", Remarks=" + Remarks.size() +
                '}';
    }
}

3.2 创建一个Application,在onCreate里面进行初始化

import io.realm.Realm;
import io.realm.RealmConfiguration;
/**
 * @author Admin
 */
public class MyApplication extends Application {

    public static RealmConfiguration config;

    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this);

        config = new RealmConfiguration.Builder()
                .name("myRealm.realm")
                .deleteRealmIfMigrationNeeded()
                .build();
        Realm.setDefaultConfiguration(config);
        //配置默认的数据库
        //setDefaultConfiguration(new RealmConfiguration.Builder().build());
//        RealmConfiguration configuration = new RealmConfiguration.Builder().build();
    }
}

3.3 主界面的实现代码

 	
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import io.realm.Realm;
import io.realm.RealmAsyncTask;
import io.realm.RealmResults;


/**
 * @author Admin
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    TextView txtShow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initRealm();


        txtShow = findViewById(R.id.txt_show);

        findViewById(R.id.btn_add).setOnClickListener(this);
        findViewById(R.id.btn_search).setOnClickListener(this);
        findViewById(R.id.btn_delete).setOnClickListener(this);
        findViewById(R.id.btn_update).setOnClickListener(this);
    }

    Realm realm;
    Integer index = 0;
    RealmAsyncTask transaction;

    private void initRealm() {
        realm = Realm.getInstance(MyApplication.config);

    }

    /**
     * 升级数据库
     */
//    class CustomMigration implements RealmMigration {
//        @Override
//        public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
//            RealmSchema schema = realm.getSchema();
//            Log.e("MainActivity", "oldVersion:" + oldVersion + "----newVersion" + newVersion);
//            if (oldVersion == 1 && newVersion == 2) {
//                RealmObjectSchema personSchema = schema.get("Dog");
//
                if (!personSchema.hasField("Dog")) {
                    personSchema.addField("aihao", String.class, FieldAttribute.REQUIRED);
                    oldVersion++;
                }
//
//            }
//        }
//    }
    private void addRealm() {

        transaction = realm.executeTransactionAsync(realm -> {

            MyRealmDemo myDemo = realm.createObject(MyRealmDemo.class);

            myDemo.setUserName("名字");
            myDemo.setPwd(index + "");
            myDemo.getRemarks().add(index);
            index++;
        }, () -> {
            //成功回调
            Log.e("MainActivity", "成功回调" + index);
        }, error -> {
            //失败回调
            Log.e("MainActivity", "失败");
        });


        transaction = realm.executeTransactionAsync(realm -> {

            Dog dog = realm.createObject(Dog.class);

            dog.setName("哈士奇");
            dog.setAge(index + "岁");
            dog.setAihao("拆家" + index);
        }, () -> {
            //成功回调
            Log.e("MainActivity", "成功回调" + index);
        }, error -> {
            //失败回调
            Log.e("MainActivity", "失败");
        });
    }

    private void updateRealm() {
        transaction = realm.executeTransactionAsync(realm -> {
            RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();
            if (myList != null && myList.size() > 0) {
                MyRealmDemo myDemo = myList.get(0);

                myDemo.setUserName("换名字");
                myDemo.setPwd("小球不得");
                myDemo.getRemarks().add(index);
                index++;
            } else {
                Log.e("MainActivity", "updateRealm没得东西,改毛线" + index);
                Toast.makeText(this, "updateRealm没得东西,改毛线", Toast.LENGTH_SHORT).show();
            }

        }, () -> {
            //成功回调
            Log.e("MainActivity", "成功回调" + index);
        }, error -> {
            //失败回调
            error.printStackTrace();
            Log.e("MainActivity", "失败" + error.getMessage());
        });
    }

    private void deleteRealm() {

        transaction = realm.executeTransactionAsync(realm -> {

            RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();
            //删除第一个数据
            myList.get(0).deleteFromRealm();
//            myList.deleteFirstFromRealm();
//            //删除最后一个数据
//            myList.deleteLastFromRealm();
//            //删除位置为1的数据
//            myList.deleteFromRealm(1);
//            //删除所有数据
//            myList.deleteAllFromRealm();
        }, () -> {
            //成功回调
            Log.e("MainActivity", "deleteRealm删球了" + index);
        }, error -> {
            //失败回调
            Log.e("MainActivity", "deleteRealm没删拖");
        });
    }

    private void searchRealm() {

        RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();
        String strText = "";
        if (myList != null && myList.size() > 0) {

            for (MyRealmDemo myRealmDemo : myList) {
                strText += "\n看什么玩意嘛:" + myRealmDemo.toString();
                Log.e("MainActivity", "看什么玩意嘛:" + myRealmDemo.toString());
                for (int intNum : myRealmDemo.getRemarks()) {
                    strText += "\n数组里的东西:" + intNum;
                    Log.e("MainActivity", "数组里的东西:" + intNum);
                }
            }

        } else {
            Log.e("MainActivity", "空的,代码错了,看锤子");
        }


        RealmResults<Dog> dogList = realm.where(Dog.class).findAll();
        for (Dog dog : dogList) {
            strText += "\n我的狗:" + dog.toString();
            Log.e("MainActivity", "我的狗:" + dog.toString());
        }

        txtShow.setText(strText);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_add:
                //添加
                addRealm();
                break;
            case R.id.btn_search:
                //查询
                searchRealm();
                break;
            case R.id.btn_delete:
                //删除
                deleteRealm();
                break;
            case R.id.btn_update:
                //修改
                updateRealm();
                break;
            default:

                break;
        }

    }


    @Override
    protected void onStop() {
        super.onStop();
        //取消当前的数据库操作状态
        if (transaction != null && !transaction.isCancelled()) {
            transaction.cancel();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //关闭连接
        realm.close();
    }
}

效果图:
在这里插入图片描述

源码:
https://github.com/StrangerYang/testRealm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值