Android Realm相關操作

寫了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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章