1. 程式人生 > >Realm資料庫使用教程(二):增加資料

Realm資料庫使用教程(二):增加資料

這裡寫圖片描述

Realm配置已經完成那麼就應該增刪改查等操作,如上圖功能,在這裡考慮循序漸進,就從“增加->查->改->刪->資料遷移->問題”的功能程序介紹

增加資料

同步操作

  • 同步操作:使用executeTransaction方法插入資料
 mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Student student = realm.createObject(Student.class);
                        student.setName("使用executeTransaction方法插入資料"
); student.setNum(new Random().nextInt(20)); } });

這裡寫圖片描述

  • 同步操作:使用copyToRealmOrUpdate方法插入資料
 /**
                 * 當Model中存在主鍵的時候,推薦使用copyToRealmOrUpdate方法插入資料。
                 * 如果物件存在,就更新該物件;反之,它會建立一個新的物件。
                 */
                final
User user = new User(); user.setId(2); user.setName("使用copyToRealmOrUpdate方法插入資料"); user.setAge(new Random().nextInt(20)); user.setSex("同步"); mRealm.executeTransaction(new Realm.Transaction() { @Override
public void execute(Realm realm) { realm.copyToRealmOrUpdate(user); } });

這裡寫圖片描述

  • 同步操作:使用copyToRealm方法插入資料
 /**
                 *若該Model沒有主鍵,使用copyToRealm方法,否則將丟擲異常。
                 */
                final Student student = new Student();
                student.setName("使用copyToRealm方法插入資料");
                student.setNum(new Random().nextInt(20));
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        realm.copyToRealm(student);
                    }
                });

這裡寫圖片描述

  • 同步操作:增加一對一表,Person包含Men(以executeTransaction為例)
Person類與Men 類,文章最下方有提供!

//以executeTransaction為例
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Person person = realm.createObject(Person.class);
                        person.setCity("杭州");
                        person.setProject("android");

                        Men men = realm.createObject(Men.class);
                        men.setName("huangxiaoguo");
                        men.setAge(25);

                        person.setMen(men);

                    }
                });

這裡寫圖片描述
這裡寫圖片描述

  • 同步操作:增加一對一表,Person包含一個Men(以copyToRealm為例)
 final Person person1 = new Person();
                person1.setCity("杭州");
                person1.setProject("android");
                Men men1 = new Men();
                men1.setName("huangxiaoguo");
                men1.setAge(new Random().nextInt(100));
                person1.setMen(men1);
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        //如果使用copyToRealmOrUpdate,Person需要主鍵
                        realm.copyToRealm(person1);
                    }
                });

這裡寫圖片描述
這裡寫圖片描述

  • 同步操作:增加一對多表,Person包含多個Men(以executeTransaction為例)
MorePerson類在文章最下方提供

mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        MorePerson morePerson = realm.createObject(MorePerson.class);
                        morePerson.setCity("杭州");
                        morePerson.setProject("開發工程師");
                        morePerson.setTime(simpleDateFormat.format(new Date()));
                        for (int i = 0; i < 3; i++) {
                            Men men = realm.createObject(Men.class);
                            men.setName("huangxiaoguo" + i);
                            men.setAge(new Random().nextInt(100));
                            morePerson.getMens().add(men);
                        }


                    }
                });

注意:在Realm中不能使用android原有的list集合,需要Realm特定的RealmList集合!

這裡寫圖片描述
這裡寫圖片描述

  • 同步操作:增加一對多表,Person包含多個Men(以copyToRealm為例)
 final MorePerson morePerson1 = new MorePerson();
                morePerson1.setCity("杭州");
                morePerson1.setProject("開發工程師");
                morePerson1.setTime(simpleDateFormat.format(new Date()));
                RealmList<Men> menList = new RealmList<>();
                for (int i = 0; i < 3; i++) {
                    Men men2 = new Men();
                    men2.setName("huangxiaoguo" + i);
                    men2.setAge(new Random().nextInt(100));
                    menList.add(men2);
                }
                morePerson1.setMens(menList);
                for (int i = 0; i < 3; i++) {
                    Men men2 = new Men();
                    men2.setName("huangxiaoguo" + i);
                    men2.setAge(new Random().nextInt(100));
                    morePerson1.getMens().add(men2);
                }
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        realm.copyToRealm(morePerson1);
                    }
                });

這裡寫圖片描述
這裡寫圖片描述

  • 同步操作:beginTransaction和commitTransaction方法插入資料(不建議使用)
  //注意:在UI和後臺執行緒同時開啟建立write的事務,可能會導致ANR錯誤。
                // 為了避免該問題,可以使用executeTransactionAsync來實現。
                mRealm.beginTransaction();//開啟事務
                Student student1 = mRealm.createObject(Student.class);
                student1.setName("事務方式插入資料");
                student1.setNum(new Random().nextInt(100) + 100);
                mRealm.commitTransaction();

這裡寫圖片描述

非同步操作(建議使用)

  • 非同步操作:使用executeTransactionAsync直接插入資料
  //該方法會開啟一個子執行緒來執行事務,並且在執行完成後進行結果通知。
                realmAsyncTask = mRealm.executeTransactionAsync(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Student student2 = realm.createObject(Student.class);
                        student2.setName("使用executeTransactionAsync直接插入資料");
                        student2.setNum(new Random().nextInt(100) + 200);
                    }
                });

非同步操作需要在activity不可見或關閉時取消任務

  @Override
    protected void onDestroy() {
        super.onDestroy();
        if (realmAsyncTask != null && !realmAsyncTask.isCancelled()) {
            realmAsyncTask.cancel();
        }
        if (mRealm != null && !mRealm.isClosed()) {
            mRealm.close();
        }
    }

這裡寫圖片描述

  • 非同步操作:使用executeTransactionAsync並且進行監聽
 //注意:如果當Acitivity或Fragment被銷燬時,在OnSuccess或OnError中執行UI操作,
                // 將導致程式奔潰 。用RealmAsyncTask .cancel();可以取消事務
                //在onStop或onDestroy中呼叫,避免crash
                realmAsyncTask = mRealm.executeTransactionAsync(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Student student2 = realm.createObject(Student.class);
                        student2.setName("使用executeTransactionAsync監聽");
                        student2.setNum(new Random().nextInt(100) + 300);
                    }
                }, new Realm.Transaction.OnSuccess() {
                    @Override
                    public void onSuccess() {
                        UIUtils.showToast("新增成功");
                    }
                }, new Realm.Transaction.OnError() {
                    @Override
                    public void onError(Throwable error) {
                        UIUtils.showToast("新增失敗");
                    }
                });

這裡寫圖片描述

將Json字串轉化為物件

  • 將Json字串轉化為物件(使用Json字串插入資料)

模擬網路資料

{
  "reason": "SUCCESSED!",
  "result": [
    {
      "dapandata": {},
      "data": {
        "buyFive": "113700",
        "buyFivePri": "8.42",
        "buyFour": "87200",
        "buyThreePri": "8.35",
        "buyTwoPri": "8.36",
        "competitivePri": "8.37",
        "date": "2012-12-11",
        "gid": "sh601009",
        "increase": "43.99",
        "name": "南京銀行",
        "nowPri": "8.37",
        "reservePri": "8.38",
        "sellFive": "214535",
        "time": "15:03:06",
        "todayMax": "8.55",
        "traAmount": "290889560",
        "traNumber": "34501453",
        "yestodEndPri": "8.26"
      },
      "gopicture": {
        "dayurl": "http://image.sinajs.cn/newchart/daily/n/sh601009.gif",
        "minurl": "http://image.sinajs.cn/newchart/min/n/sh601009.gif",
        "monthurl": "http://image.sinajs.cn/newchart/monthly/n/sh601009.gif",
        "weekurl": "http://image.sinajs.cn/newchart/weekly/n/sh601009.gif"
      }
    }
  ],
  "resultcode": "200"
}

建立資料庫Model

package tsou.com.simple.realmtest.bean;

import io.realm.RealmObject;

/**
 * Created by Administrator on 2017/12/18 0018.
 * Realm 解析 JSON 時遵循如下規則:
 * <p>
 * 使用包含空值(null)的 JSON 建立物件:
 * 對於非必須(可為空值的屬性),設定其值為 null;
 * 對於必須(不可為空值的屬性),丟擲異常;
 * 使用包含空值(null)的 JSON 更新物件:
 * 對於非必須(可為空值的屬性),設定其值為 null;
 * 對於必須(不可為空值的屬性),丟擲異常;
 * 使用不包含對應屬性的 JSON: * 該屬性保持不變
 * <p>
 */

public class Stock extends RealmObject {


    /**
     * buyFive : 113700
     * buyFivePri : 8.42
     * buyFour : 87200
     * buyThreePri : 8.35
     * buyTwoPri : 8.36
     * competitivePri : 8.37
     * date : 2012-12-11
     * gid : sh601009
     * increase : 43.99
     * name : 南京銀行
     * nowPri : 8.37
     * reservePri : 8.38
     * sellFive : 214535
     * time : 15:03:06
     * todayMax : 8.55
     * traAmount : 290889560
     * traNumber : 34501453
     * yestodEndPri : 8.26
     */

    private String buyFive;
    private String buyFivePri;
    private String buyFour;
    private String buyThreePri;
    private String buyTwoPri;
    private String competitivePri;
    private String date;
    private String gid;
    private String increase;
    private String name;
    private String nowPri;
    private String reservePri;
    private String sellFive;
    private String time;
    private String todayMax;
    private String traAmount;
    private String traNumber;
    private String yestodEndPri;

    public String getBuyFive() {
        return buyFive;
    }

    public void setBuyFive(String buyFive) {
        this.buyFive = buyFive;
    }

    public String getBuyFivePri() {
        return buyFivePri;
    }

    public void setBuyFivePri(String buyFivePri) {
        this.buyFivePri = buyFivePri;
    }

    public String getBuyFour() {
        return buyFour;
    }

    public void setBuyFour(String buyFour) {
        this.buyFour = buyFour;
    }

    public String getBuyThreePri() {
        return buyThreePri;
    }

    public void setBuyThreePri(String buyThreePri) {
        this.buyThreePri = buyThreePri;
    }

    public String getBuyTwoPri() {
        return buyTwoPri;
    }

    public void setBuyTwoPri(String buyTwoPri) {
        this.buyTwoPri = buyTwoPri;
    }

    public String getCompetitivePri() {
        return competitivePri;
    }

    public void setCompetitivePri(String competitivePri) {
        this.competitivePri = competitivePri;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getGid() {
        return gid;
    }

    public void setGid(String gid) {
        this.gid = gid;
    }

    public String getIncrease() {
        return increase;
    }

    public void setIncrease(String increase) {
        this.increase = increase;
    }

    public String getName() {
        return name;
    }

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

    public String getNowPri() {
        return nowPri;
    }

    public void setNowPri(String nowPri) {
        this.nowPri = nowPri;
    }

    public String getReservePri() {
        return reservePri;
    }

    public void setReservePri(String reservePri) {
        this.reservePri = reservePri;
    }

    public String getSellFive() {
        return sellFive;
    }

    public void setSellFive(String sellFive) {
        this.sellFive = sellFive;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getTodayMax() {
        return todayMax;
    }

    public void setTodayMax(String todayMax) {
        this.todayMax = todayMax;
    }

    public String getTraAmount() {
        return traAmount;
    }

    public void setTraAmount(String traAmount) {
        this.traAmount = traAmount;
    }

    public String getTraNumber() {
        return traNumber;
    }

    public void setTraNumber(String traNumber) {
        this.traNumber = traNumber;
    }

    public String getYestodEndPri() {
        return yestodEndPri;
    }

    public void setYestodEndPri(String yestodEndPri) {
        this.yestodEndPri = yestodEndPri;
    }
}

解析並插入資料庫

mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        String stockJson = UIUtils.getJson("Stock");
                        try {
                            JSONObject js = new JSONObject(stockJson);
                            String result = js.optString("result");

                            JSONArray jsonArray = new JSONArray(result);
                            String resultOne = jsonArray.optString(0);

                            JSONObject js2 = new JSONObject(resultOne);
                            String data = js2.optString("data");
                            realm.createObjectFromJson(Stock.class, data);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                });

這裡寫圖片描述

好了,到這裡增添資料的方法基本上都介紹完了,如果資料多的話建議使用非同步!其他功能請看下文!

這裡提供整個activity程式碼以供參考:

package tsou.com.simple.realmtest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

import io.realm.Realm;
import io.realm.RealmAsyncTask;
import io.realm.RealmList;
import tsou.com.simple.realmtest.adapter.MyAdapter;
import tsou.com.simple.realmtest.bean.Men;
import tsou.com.simple.realmtest.bean.MorePerson;
import tsou.com.simple.realmtest.bean.Person;
import tsou.com.simple.realmtest.bean.Stock;
import tsou.com.simple.realmtest.bean.Student;
import tsou.com.simple.realmtest.bean.User;
import tsou.com.simple.realmtest.utils.UIUtils;

public class AddActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private ListView mListview;
    private List<String> titles = new ArrayList<>();
    private Realm mRealm;
    private SimpleDateFormat simpleDateFormat;
    private RealmAsyncTask realmAsyncTask;

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (realmAsyncTask != null && !realmAsyncTask.isCancelled()) {
            realmAsyncTask.cancel();
        }
        if (mRealm != null && !mRealm.isClosed()) {
            mRealm.close();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        mRealm = UIUtils.getRealmInstance();
        simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        initData();
        initView();
        initListener();
    }

    private void initData() {
        //***********************同步操作*********************************
        //注意:如果在UI執行緒中插入過多的資料,可能會導致主執行緒擁塞。
        titles.add("同步操作:使用executeTransaction方法插入資料");
        titles.add("同步操作:使用copyToRealmOrUpdate方法插入資料");
        titles.add("同步操作:使用copyToRealm方法插入資料");
        titles.add("同步操作:增加一對一表,Person包含Men(以executeTransaction為例)");
        titles.add("同步操作:增加一對一表,Person包含一個Men(以copyToRealm為例)");
        titles.add("同步操作:增加一對多表,Person包含多個Men(以executeTransaction為例)");
        titles.add("同步操作:增加一對多表,Person包含多個Men(以copyToRealm為例)");
        titles.add("同步操作:beginTransaction和commitTransaction方法插入資料");
        //***********************非同步操作*********************************
        titles.add("非同步操作:使用executeTransactionAsync直接插入資料");
        titles.add("非同步操作:使用executeTransactionAsync並且進行監聽");
        //***********************將Json字串轉化為物件*****************
        titles.add("將Json字串轉化為物件(使用Json字串插入資料)");
    }

    private void initView() {
        mListview = (ListView) findViewById(R.id.listview);

        mListview.setAdapter(new MyAdapter(this, titles));
    }

    private void initListener() {
        mListview.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
        switch (position) {
            default:
                break;
            case 0://同步操作:使用executeTransaction方法插入資料
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Student student = realm.createObject(Student.class);
                        student.setName("使用executeTransaction方法插入資料");
                        student.setNum(new Random().nextInt(20));
                    }
                });
                break;
            case 1://同步操作:使用copyToRealmOrUpdate方法插入資料
                /**
                 * 當Model中存在主鍵的時候,推薦使用copyToRealmOrUpdate方法插入資料。
                 * 如果物件存在,就更新該物件;反之,它會建立一個新的物件。
                 */
                final User user = new User();
                user.setId(2);
                user.setName("使用copyToRealmOrUpdate方法插入資料");
                user.setAge(new Random().nextInt(20));
                user.setSex("同步");
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        realm.copyToRealmOrUpdate(user);
                    }
                });
                break;
            case 2://同步操作:使用copyToRealm方法插入資料
                /**
                 *若該Model沒有主鍵,使用copyToRealm方法,否則將丟擲異常。
                 */
                final Student student = new Student();
                student.setName("使用copyToRealm方法插入資料");
                student.setNum(new Random().nextInt(20));
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        realm.copyToRealm(student);
                    }
                });
                break;
            case 3://同步操作:增加一對一表,Person包含Men(以executeTransaction為例)
                //以executeTransaction為例
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Person person = realm.createObject(Person.class);
                        person.setCity("杭州");
                        person.setProject("android");

                        Men men = realm.createObject(Men.class);
                        men.setName("huangxiaoguo");
                        men.setAge(25);

                        person.setMen(men);

                    }
                });
                break;

            case 4://同步操作:增加一對一表,Person包含Men(以copyToRealm為例)
                final Person person1 = new Person();
                person1.setCity("杭州");
                person1.setProject("android");
                Men men1 = new Men();
                men1.setName("huangxiaoguo");
                men1.setAge(new Random().nextInt(100));
                person1.setMen(men1);
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        //如果使用copyToRealmOrUpdate,Person需要主鍵
                        realm.copyToRealm(person1);
                    }
                });
                break;
            case 5://同步操作:增加一對多表,Person包含多個Men(以executeTransaction為例)
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        MorePerson morePerson = realm.createObject(MorePerson.class);
                        morePerson.setCity("杭州");
                        morePerson.setProject("開發工程師");
                        morePerson.setTime(simpleDateFormat.format(new Date()));
                        for (int i = 0; i < 3; i++) {
                            Men men = realm.createObject(Men.class);
                            men.setName("huangxiaoguo" + i);
                            men.setAge(new Random().nextInt(100));
                            morePerson.getMens().add(men);
                        }


                    }
                });
                break;
            case 6://同步操作:增加一對多表,Person包含多個Men(以copyToRealm為例)
                final MorePerson morePerson1 = new MorePerson();
                morePerson1.setCity("杭州");
                morePerson1.setProject("開發工程師");
                morePerson1.setTime(simpleDateFormat.format(new Date()));
                RealmList<Men> menList = new RealmList<>();
                for (int i = 0; i < 3; i++) {
                    Men men2 = new Men();
                    men2.setName("huangxiaoguo" + i);
                    men2.setAge(new Random().nextInt(100));
                    menList.add(men2);
                }
                morePerson1.setMens(menList);
                for (int i = 0; i < 3; i++) {
                    Men men2 = new Men();
                    men2.setName("huangxiaoguo" + i);
                    men2.setAge(new Random().nextInt(100));
                    morePerson1.getMens().add(men2);
                }
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        realm.copyToRealm(morePerson1);
                    }
                });
                break;

            case 7://同步操作:beginTransaction和commitTransaction方法插入資料
                //注意:在UI和後臺執行緒同時開啟建立write的事務,可能會導致ANR錯誤。
                // 為了避免該問題,可以使用executeTransactionAsync來實現。
                mRealm.beginTransaction();//開啟事務
                Student student1 = mRealm.createObject(Student.class);
                student1.setName("事務方式插入資料");
                student1.setNum(new Random().nextInt(100) + 100);
                mRealm.commitTransaction();
                break;

            case 8://非同步操作:使用executeTransactionAsync直接插入資料
                //該方法會開啟一個子執行緒來執行事務,並且在執行完成後進行結果通知。
                realmAsyncTask = mRealm.executeTransactionAsync(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Student student2 = realm.createObject(Student.class);
                        student2.setName("使用executeTransactionAsync直接插入資料");
                        student2.setNum(new Random().nextInt(100) + 200);
                    }
                });

                break;

            case 9://非同步操作:使用executeTransactionAsync並且進行監聽
                //注意:如果當Acitivity或Fragment被銷燬時,在OnSuccess或OnError中執行UI操作,
                // 將導致程式奔潰 。用RealmAsyncTask .cancel();可以取消事務
                //在onStop或onDestroy中呼叫,避免crash
                realmAsyncTask = mRealm.executeTransactionAsync(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Student student2 = realm.createObject(Student.class);
                        student2.setName("使用executeTransactionAsync監聽");
                        student2.setNum(new Random().nextInt(100) + 300);
                    }
                }, new Realm.Transaction.OnSuccess() {
                    @Override
                    public void onSuccess() {
                        UIUtils.showToast("新增成功");
                    }
                }, new Realm.Transaction.OnError() {
                    @Override
                    public void onError(Throwable error) {
                        UIUtils.showToast("新增失敗");
                    }
                });
                break;
            case 10://將Json字串轉化為物件(使用Json字串插入資料)
                mRealm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        String stockJson = UIUtils.getJson("Stock");
                        try {
                            JSONObject js = new JSONObject(stockJson);
                            String result = js.optString("result");

                            JSONArray jsonArray = new JSONArray(result);
                            String resultOne = jsonArray.optString(0);

                            JSONObject js2 = new JSONObject(resultOne);
                            String data = js2.optString("data");
                            realm.createObjectFromJson(Stock.class, data);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                });
                break;
        }
    }
}

Person類

package tsou.com.simple.realmtest.bean;

import io.realm.RealmObject;

/**
 * Created by Administrator on 2017/12/15 0015.
 */

public class Person extends RealmObject{
    private String city;
    private String project;
    private Men men;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getProject() {
        return project;
    }

    public void setProject(String project) {
        this.project = project;
    }

    public Men getMen() {
        return men;
    }

    public void setMen(Men men) {
        this.men = men;
    }
}

Men類

package tsou.com.simple.realmtest.bean;

import io.realm.RealmObject;

/**
 * Created by Administrator on 2017/12/15 0015.
 */

public class Men extends RealmObject {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

MorePerson類

package tsou.com.simple.realmtest.bean;

import io.realm.RealmList;
import io.realm.RealmObject;

/**
 * Created by Administrator on 2017/12/15 0015.
 */

public class MorePerson extends RealmObject {
    private String city;
    private String project;
    private String time;
    private RealmList<Men> mens;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getProject() {
        return project;
    }

    public void setProject(String project) {
        this.project = project;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public RealmList<Men> getMens() {
        return mens;
    }

    public void setMens(RealmList<Men> mens) {
        this.mens = mens;
    }
}