1. 程式人生 > >Realm的簡單使用(單表_增刪改查_包含非同步操作)

Realm的簡單使用(單表_增刪改查_包含非同步操作)

學習參考網址:

具體程式碼:

由於互動的資料被我固定了,又為了防止因為資料是固定的而發生異常,所以寫了些異常捕獲,只要添上互動的資料,功能沒有任何問題,就可以不用寫這些異常捕獲了。

前期準備:

1.在project的gradle裡新增classpath “io.realm:realm-gradle-plugin:2.2.1”

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath "io.realm:realm-gradle-plugin:2.2.1" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }

2.在APP的gradle裡新增apply plugin: ‘realm-android’

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12' compile 'com.jakewharton:butterknife:8.0.1' apt 'com.jakewharton:butterknife-compiler:8.0.1' apply plugin: 'realm-android' }

3.建立MyApplication:

public class MyApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();

        Realm.init(this);

        //預設配置
//        RealmConfiguration config = new RealmConfiguration.Builder().build();

        //自定義配置
        RealmConfiguration config = new  RealmConfiguration.Builder()
                .name("myRealm.realm")
                .deleteRealmIfMigrationNeeded()
                .build();
        Realm.setDefaultConfiguration(config);
    }
}

4.修改配置檔案:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxx.realmdemo">

    <application
        android:name=".MyApplication"
       ...
        <activity android:name=".HomeActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        ...
    </application>

</manifest>

物件實體:

1.User:

/**
 * 建立實體
 */

public class User extends RealmObject {

    @PrimaryKey
    private String id;
    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String toString() {
        return "student:id="+ id +" name=" + name +"email=" + email + "\n";
    }
}

非非同步操作:

1.home_activity的佈局:

<?xml version="1.0" encoding="utf-8"?>
<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:gravity="center|top"
    android:orientation="vertical"
    tools:context="com.xxx.realmdemo.HomeActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right">
        <TextView
            android:id="@+id/tv_asy_function"
            android:layout_marginTop="15dp"
            android:layout_marginRight="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="非同步操作" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tv_custom_add"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="增" />
        <TextView
            android:id="@+id/tv_custom_delete"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="刪" />
        <TextView
            android:id="@+id/tv_custom_update"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="改" />
        <TextView
            android:id="@+id/tv_custom_query"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="查" />
    </LinearLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/tv_show_result"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"/>
    </ScrollView>
</LinearLayout>

2.home_activity程式碼:

public class HomeActivity extends AppCompatActivity {

    @BindView(R.id.tv_custom_add)
    TextView tvCustomAdd;
    @BindView(R.id.tv_custom_delete)
    TextView tvCustomDelete;
    @BindView(R.id.tv_custom_update)
    TextView tvCustomUpdate;
    @BindView(R.id.tv_custom_query)
    TextView tvCustomQuery;
    @BindView(R.id.tv_show_result)
    TextView tvShowResult;
    @BindView(R.id.tv_asy_function)
    TextView tvAsyFunction;

    private int number = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.tv_custom_add, R.id.tv_custom_delete, R.id.tv_custom_update, R.id.tv_custom_query, R.id.tv_asy_function})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.tv_custom_add:
                addObject();
                break;
            case R.id.tv_custom_delete:
                deleteObject();
                break;
            case R.id.tv_custom_update:
                updateObject();
                break;
            case R.id.tv_custom_query:
                queryAllObject();
                break;
            case R.id.tv_asy_function:
                Intent intent = new Intent( HomeActivity.this,ActAsyFunction.class);
                startActivity( intent);
                break;
        }
    }

    /**
     * 增加
     */
    public void addObject() {
//        //實現方法一:事務操作
//        //型別一 :新建一個物件,並進行儲存
//        Realm realm=Realm.getDefaultInstance();
//        realm.beginTransaction();
//        User user = realm.createObject(User.class); // Create a new object
//        user.setName("John");
//        user.setEmail("[email protected]");
//        realm.commitTransaction();
//        //型別二:複製一個物件到Realm資料庫
//        Realm realm=Realm.getDefaultInstance();
//        User user = new User("John");
//        user.setEmail("[email protected]");
//        realm.beginTransaction();
//        realm.copyToRealm(user);
//        realm.commitTransaction();

        //實現方法二:使用事務塊
        Realm mRealm = Realm.getDefaultInstance();
        final User user = new User();
        user.setEmail("john" + number + "@corporation.com");
        user.setId(String.valueOf(number));
        user.setName("John" + number);
        try{
            mRealm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    realm.copyToRealm(user);
                    tvShowResult.setText(" 增加成功:" + user.toString());
                }
            });
        }catch (Exception e){
            number++;
            e.printStackTrace();
            tvShowResult.setText(" 增加失敗");
        }
    }

    /**
     * 刪除
     * 同樣也可以使用同addObject函式的beginTransaction和commitTransaction方法進行刪除
     */
    public void deleteObject() {
        final int positon = 1;
        Realm mRealm = Realm.getDefaultInstance();
        final RealmResults<User> users = mRealm.where(User.class).findAll();
        try {
            mRealm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    if (users.size() > 0) {
                        User user = users.get(positon);
                        String str = user.toString();
                        user.deleteFromRealm();
                        tvShowResult.setText("刪除成功\n" + str);
//                    //刪除第一個資料
//                    users.deleteFirstFromRealm();
//                    //刪除最後一個數據
//                    users.deleteLastFromRealm();
//                    //刪除位置為1的資料
//                    users.deleteFromRealm(1);
//                    //刪除所有資料
//                    users.deleteAllFromRealm();
                    } else {
                        tvShowResult.setText("user表裡無資料");
                    }
                }
            });
        }catch (Exception e){
            e.printStackTrace();
            tvShowResult.setText("刪除失敗");
        }
    }

    /**
     * 修改
     */
    public void updateObject() {
       try{
           String id = "1";
           String newName = "玫玫";
           Realm mRealm = Realm.getDefaultInstance();
           User user = mRealm.where(User.class).equalTo("id", id).findFirst();
           mRealm.beginTransaction();
           user.setName(newName);
           mRealm.commitTransaction();
           tvShowResult.setText("更新\n" + user.toString());
       }catch (Exception e){
           e.printStackTrace();
           tvShowResult.setText(" 更新失敗");
       }
    }

    /**
     * 查詢所有資料
     */
    public void queryAllObject() {
        Realm mRealm = Realm.getDefaultInstance();
        RealmResults<User> users = mRealm.where(User.class).findAll();
        /**
         * 對查詢結果,按Id進行排序,只能對查詢結果進行排序
         */
//        //增序排列
//        users=users.sort("id");
        //降序排列
        users = users.sort("id", Sort.DESCENDING);
        String str = "";
        for (int i = 0; i < users.size(); i++) {
            User user = users.get( i);
            str = str + user.toString();
        }
        tvShowResult.setText("查詢所有資料:\n" + str);
    }

}

非同步操作

1.佈局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tv_asy_add"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="非同步增" />
        <TextView
            android:id="@+id/tv_asy_delete"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="非同步刪" />
        <TextView
            android:id="@+id/tv_asy_update"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="非同步改" />
        <TextView
            android:id="@+id/tv_asy_query"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"
            android:text="非同步查" />
    </LinearLayout>
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/tv_show_result"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="21sp"/>
    </ScrollView>
</LinearLayout>

2.acitivty程式碼:

public class ActAsyFunction extends AppCompatActivity {

    @BindView(R.id.tv_asy_add)
    TextView tvAsyAdd;
    @BindView(R.id.tv_asy_delete)
    TextView tvAsyDelete;
    @BindView(R.id.tv_asy_update)
    TextView tvAsyUpdate;
    @BindView(R.id.tv_asy_query)
    TextView tvAsyQuery;
    @BindView(R.id.tv_show_result)
    TextView tvShowResult;

    private RealmAsyncTask addTask;
    private RealmAsyncTask  deleteTask;
    private RealmAsyncTask  updateTask;
    private RealmResults<User> users;

    private int number = 1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act_asyfunction);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.tv_asy_add, R.id.tv_asy_delete, R.id.tv_asy_update, R.id.tv_asy_query})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.tv_asy_add:
                User user = new User();
                user.setEmail("john" + number + "@corporation.com");
                user.setId(String.valueOf(number));
                user.setName("John" + number);
                addUser( user );
                number++;
                break;
            case R.id.tv_asy_delete:
                String id = "1";
                deleteUser( id);
                break;
            case R.id.tv_asy_update:
                String Id = "2";
                String name = "玫玫";
                updateUser( name,Id  );
                break;
            case R.id.tv_asy_query:
                queryUser();
                break;
        }
    }

    /**
     * 增加
     * @param user
     */
    private void addUser(final User user) {
        Realm mRealm = Realm.getDefaultInstance();
        addTask=  mRealm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                realm.copyToRealm(user);
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                tvShowResult.setText( "增加成功" + user.toString());
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                tvShowResult.setText( "增加失敗");
            }
        });
    }

    /**
     * 刪除
     * @param id
     */
    private void deleteUser(final String id){
        Realm mRealm = Realm.getDefaultInstance();
        final String[] str = {""};
        deleteTask=   mRealm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                User user=realm.where(User.class).equalTo("id",id).findFirst();
                str[0] = user.toString();
                user.deleteFromRealm();
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                tvShowResult.setText( "刪除成功" + str[0] );
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                tvShowResult.setText( "刪除失敗" + str[0] );
            }
        });

    }

    /**
     * 修改
     * @param name
     * @param id
     */
    private void updateUser(final String name, final String id){
        Realm mRealm = Realm.getDefaultInstance();
        final String[] oldStr = {""};
        final String[] newStr = {""};
        updateTask = mRealm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                User user=realm.where(User.class).equalTo("id",id).findFirst();
                oldStr[0] = user.toString();
                user.setName(name);
                newStr[0] = user.toString();
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                tvShowResult.setText( "舊資訊:" + oldStr[0] + "\n修改成功\n" + newStr[0]);
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {
                tvShowResult.setText( "舊資訊:" + oldStr[0] + "\n修改失敗");
            }
        });
    }

    /**
     * 查詢所有資料
     */
    private void queryUser(){
        final Realm mRealm = Realm.getDefaultInstance();
        users = mRealm.where(User.class).findAllAsync();
        users.addChangeListener(new RealmChangeListener<RealmResults<User>>() {
            @Override
            public void onChange(RealmResults<User> element) {
                element= element.sort("id");
                List<User> datas=mRealm.copyFromRealm(element);
                String str = "";
                for (int i = 0; i <datas.size(); i++) {
                    User user = datas.get( i);
                    str = str + user.toString();
                }
                tvShowResult.setText("查詢所有資料:\n" + str);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (addTask != null && !addTask.isCancelled()){
            addTask.cancel();
        }
        if (deleteTask != null && !deleteTask.isCancelled()){
            deleteTask.cancel();
        }
        if (updateTask != null && !updateTask.isCancelled()){
            updateTask.cancel();
        }
        if( users != null){
            users.removeChangeListeners();
        }
    }

}

相關推薦

Realm簡單使用_刪改_包含非同步操作

學習參考網址: 具體程式碼: 由於互動的資料被我固定了,又為了防止因為資料是固定的而發生異常,所以寫了些異常捕獲,只要添上互動的資料,功能沒有任何問題,就可以不用寫這些異常捕獲了。 前期準備: 1.在project的gradle裡新增classp

02 mybatis動態sqlxml方式實現刪改

QueryVo   package cn.itcast.domain; import java.io.Serializable; import java.util.List; public class QueryVo implements Serial

mybatis 刪改

ron ges per 增刪 分享 返回id width com bat 添加數據返回id mapper.xml mapper -> insert -> selectKey mybatis 內置別名 mybatis 單表的增刪改查

django 利用ORM對進行刪改

man api light 賦值 連接 取出 簡單 extern follow 牛小妹上周末,一直在嘗試如何把數據庫的數據弄到界面上。畢竟是新手,搞不出來,文檔也看不懂。不過沒關系,才剛上大學。今晚我們就來解釋下,要把數據搞到界面的第一步。先把數據放到庫裏,然後再把數據從庫

Mybatis(一實現刪改

bsp 表達 1.0 屬性 過程 col 轉化 iba sys 1.1 什麽是Mybatis MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google co

ORM對刪改

price 增刪改 www com bject .html 增加 () save 表記錄的增加: 1)b = Book(name=‘python‘, price=99) b.save() 2)Book.objects.create(name=‘python‘, pric

Django之刪改

wsgi cer oop smi .py one ram span rest books/urls.py """books URL Configuration The `urlpatterns` list routes URLs to views. For

MySQL刪改操作

今天我們一起回顧MySQL單表的增刪改查操作。 這裡我說的在細一點就是,裡面會涉及到對庫的操作以及對表結構的操作然後是對表記錄的操作。 你想要完成這些操作,首先你得對資料庫有一定的瞭解,這裡也對資料庫進行了一個簡單的介紹 什麼是資料庫?資料庫就是儲存資料的倉庫,其本質是一個檔案系統,資料

Django刪改

1.Django下載 命名行 pip install django==1.11.16 pip install django==1.11.16 -i https://pypi.doubanio.com/simple/ pycharm settings 直譯器 點+號 輸入Django

MySQL基礎篇庫/刪改

上一篇我們已經在Linux系統裝好了MySQL,現在我們來熟悉一下MySQL及它的操作語句。 MySQL是一個關係型資料庫管理系統,MySQL 是最流行的關係型資料庫管理系統之一. 設計模型: E-R設計模型【E表示Entry,實體】、【R表示Relationship,關係】。

一、Mybatis 常用刪改

1.編寫sql表,插入原始資料 1 -- 刪除表 2 DROP TABLE testA; 3 -- 建立表 4 CREATE TABLE testA( 5 id INT AUTO_INCREMENT PRIMARY KEY, 6 username VARCHAR(

藉助jeesite實現刪改真是so easy

1. 需要在資料庫裡建立一張表。 2. 利用jeesite的程式碼生成模組,業務表配置(把剛才建立的表配置上),生成配置方案,  儲存並生成程式碼,controller,service,dao,xml和jsp就都有了。 3.選單管理 建立jeesite的一級選單

圖書管理系統-刪改

key button ref ati 用戶 oct 排序 ima orm 配置環境 settings.py文件 MIDDLEWARE = [ ‘django.middleware.security.SecurityMiddleware‘, ‘dj

mariadb_2 刪改

最大值 例如 || 名稱 modify 一個 update del enter 命令關鍵字: 創建表 create 刪除表 drop 修改表的內容 update 修改

DML、DQL與刪改20190215下午

正向 port sun tin bin schema safe word ping MariaDB [db1]> select * from student;+----+------+-----+--------+-------+| id | name | age |

實戰 :對HBase業務進行刪改操作Eclipse,Linux 環境

嘗試使用HBASE shell 和HBase java API 兩種方式來演示對業務表的操作。 一、Hbase Shell 1、啟動控制檯,啟用hbaseshell 控制檯對Hbase 進行操作具體命令如下: [[email protected] hbase]$ bin/h

Mybatis-02操作刪改

回顧 1.瞭解定義,知道mybatis的作用 2.搭建簡單mybatis架構 3.寫出簡單的測試程式碼進行測試 對資料庫表進行操作 通過Mybatis-01的簡單介紹我們可以進行簡單的查詢操作,接下來我

【Python模組】sqlalchemy orm模組--基礎連線資料庫,建刪改

SQLAlchemy是Python程式語言下的一款ORM框架,該框架建立在資料庫API之上,使用關係物件對映進行資料庫操作,簡言之便是:將物件轉換成SQL,然後使用資料庫API執行SQL並獲取執行結果。 安裝: pip3 install SQLAlchemy 版本檢查

mongodb的簡單使用二結合springdata實現刪改

          package com.glgd.recarticle.dao; import java.util.ArrayList; import java.util.List; import org.springframework.data.mongodb.core.query.Criteria

hbase命令集shell 命令,如建,清空刪改

 兩篇可以參考的文章,講的不錯 http://www.cnblogs.com/nexiyi/p/hbase_shell.html (http://blog.iyunv.com/wulantian/article/details/41011297)  =============