Save 37% off PRO during our Black Friday Sale! »

Realm Meetup #19 (Java)

358791a9c91e7615ffe62c7c6e02e470?s=47 zaki50
September 29, 2016

Realm Meetup #19 (Java)

358791a9c91e7615ffe62c7c6e02e470?s=128

zaki50

September 29, 2016
Tweet

Transcript

  1. Realm meetup #19 my@realm.io

  2. #realm_jp my@realm.io

  3. Makoto Yamazaki Realm Inc. / uPhyca Inc. my@realm.io

  4. Realm CoreΛ׬શެ։ my@realm.io

  5. Realm CoreϓϩδΣΫτ my@realm.io https://github.com/realm/realm-core

  6. Ϗϧυํ๏ my@realm.io how-to-build.md ࢀর • Ubuntu 10.04, 12.04, 13.04, 13.10,

    14.04 • Linux Mint 15, 16, 17, 17.1 • Fedora 17, 18, 19, 20 • Amazon Linux 2012.09 • OS X 10.10 and 10.11
  7. Ϗϧυํ๏ my@realm.io how-to-build.md ࢀর # ڞ௨ $ sh build.sh config

    $ sh build.sh build $ sh build.sh test # iOS $ sh build.sh build-ios # watchOS $ sh build.sh build-watchos # tvOS $ sh build.sh build-tvos # Android $ sh build.sh build-android
  8. ϑΝΠϧߏ੒ my@realm.io src/realm test/ doc/ ओʹݟΔ΂͖͸ҎԼͷσΟϨΫτϦ

  9. ϔομϑΝΠϧ my@realm.io /// The Table class is non-polymorphic, that is,

    it has no virtual
 /// functions. This is important because it ensures that there is no run-time
 /// distinction between a Table instance and an instance of any variation of
 /// BasicTable<T>, and this, in turn, makes it valid to cast a pointer from
 /// Table to BasicTable<T> even when the instance is constructed as a Table. Of
 /// course, this also assumes that BasicTable<> is non-polymorphic, has no
 /// destructor, and adds no extra data members.
 ///
 /// FIXME: Table assignment (from any group to any group) could be made aliasing
 /// safe as follows: Start by cloning source table into target allocator. On
 /// success, assign, and then deallocate any previous structure at the target.
 ///
 /// FIXME: It might be desirable to have a 'table move' feature between two
 /// places inside the same group (say from a subtable or a mixed column to group
 /// level). This could be done in a very efficient manner.
 ///
 /// FIXME: When compiling in debug mode, all public non-static table functions
 /// should REALM_ASSERT(is_attached()).
 class Table {
 public:
 /// Construct a new freestanding top-level table with static
 /// lifetime.
 ///
 /// This constructor should be used only when placing a table
 /// instance on the stack, and it is then the responsibility of
 /// the application that there are no objects of type TableRef or
 /// ConstTableRef that refer to it, or to any of its subtables,
 /// when it goes out of scope. To create a top-level table with
 /// dynamic lifetime, use Table::create() instead.
 Table(Allocator& = Allocator::get_default());
 
 /// Construct a copy of the specified table as a new freestanding
 /// top-level table with static lifetime.
 ///
 /// This constructor should be used only when placing a table
 /// instance on the stack, and it is then the responsibility of
 /// the application that there are no objects of type TableRef or
 /// ConstTableRef that refer to it, or to any of its subtables,
 /// when it goes out of scope. To create a top-level table with
 /// dynamic lifetime, use Table::copy() instead.
 Table(const Table&, Allocator& = Allocator::get_default());
 ͓קΊϔομϑΝΠϧ group.hpp group_shared.hpp table.hpp string_data.hpp index_string.hpp query_expression.hpp
  10. star & PR͓଴͍ͪͯ͠·͢ my@realm.io CONTRIBUTING.md doc/development/coding_style_guide.cpp

  11. Recent Updates my@realm.io

  12. Realm Java 2.0.0 (was 1.2.0) my@realm.io

  13. Realm Java 2.0.0(৽ػೳ) • Realm Mobile PlatformରԠʂʂʂʢϕʔλʣ • άϩʔόϧॳظԽϝιουRealm.init(Context)Λಋೖ •

    ॳظԽϝιουҎ֎Ͱ͸Context͕ෆཁʹ • RealmLogΫϥεʹΑΔϩά੍ޚ • ϞσϧΫϥεͰΦϒδΣΫτͷॳظ஋ΛఆٛՄೳʹ • isManaged()ϝιουΛ௥Ճ my@realm.io
  14. Realm Java 2.0.0(όάमਖ਼) • ϞσϧΫϥεͷίϯετϥΫλ಺ͰɺଞͷϞσϧΫϥεͷϑΟʔϧυΞ Ϋηε͕ਖ਼͘͠ಈ࡞͠ͳ͍όάΛमਖ਼(#3361) • ϞσϧͷίϯετϥΫλ͔Βsetter/getterΛݺͿͱNPE͕ൃੜ͢Δόά Λमਖ਼(#2536) •

    ଞͷϓϩδΣΫτͰॻ͖׵͑ࡁΈͷϞσϧΫϥεΛ࠶౓ॻ͖׵͑Α͏͠ ͯΤϥʔ͕ൃੜ͢ΔόάΛमਖ਼(#3469) my@realm.io
  15. Realm Java 2.0.0(ඇޓ׵ͷมߋ1) • ϑΝΠϧͷϑΥʔϚοτ͕มߋʹͳ͍ͬͯ·͢(ࣗಈతʹม׵) • ͸͡ΊʹඞͣRealm.init(Context)ΛݺΜͰ͍ͩ͘͞(Application౳Ͱ) • Ҿ͖਺ʹContextΛऔΔίϯετϥΫλ/ϝιου͸Context͕ͳ͍΋ͷΛ࢖ͬͯͩ͘ ͍͞

    • ΞϯϚωʔδυͳRealmObjectͷisValid()͸ৗʹtrueΛฦ͢Α͏ʹͳΓ·ͨ͠(ଞͷϓ ϥοτϑΥʔϜͱͷޓ׵ੑ) • armeabiͷόΠφϦΛ࡟আ͠·ͨ͠(෮׆ͷՄೳੑ͋Γ #3508) • IncompatibleLockFileException ͱRealmIOExcpetion ͕ഇࢭ͞ΕɺRealmFileException Ͱஔ͖׵͑ΒΕ·ͨ͠ my@realm.io
  16. Realm Java 2.0.0(ඇޓ׵ͷมߋ2) • ϓϥΠϚϦΩʔ͕ఆٛ͞ΕͨΫϥεΛRealm.createObject()Ͱ࡞੒͢Δ৔ ߹ɺRealm.createObject(Class)Ͱ͸ͳ͘Realm.createObject(Class,Object) Λ࢖͍ͬͯͩ͘͞ • JSON͔ΒΠϯϙʔτ͢ΔࡍɺϓϥΠϚϦΩʔ͕ఆٛ͞Ε͍ͯΔʹ΋ؔΘ ΒͣJSON

    ্ʹଘࡏ͠ͳ͍৔߹͸ྫ֎͕εϩʔ͞Ε·͢ • ϓϥΠϚϦΩʔͷ஋͸มߋෆՄʹͳΓ·ͨ͠ • Realm.create*FromJson()͸ɺϞσϧΫϥεͷϑΟʔϧυ΍ίϯετϥΫλ Ͱఆٛ͞Εͨॳظ஋Λ൓ө͢ΔΑ͏ʹͳΓ·ͨ͠ my@realm.io
  17. Realm Mobile PlatformରԠ my@realm.io realm { syncEnabled = true }

    appͷbuild.gradeʹ ৄࡉ͸ bit.ly/RMP_JAVA
  18. Realm Mobile PlatformରԠ my@realm.io Credentials creds = Credentials.usernamePassword(username, password, true);


    User.loginAsync(creds, "https://realm.example.com:9443", new User.Callback() {
 @Override
 public void onSuccess(User user) { // ログイン成功時の処理 }
 
 @Override
 public void onError(ObjectServerError error) {
 // エラー処理
 }
 } );
  19. Realm Mobile PlatformରԠ my@realm.io // ユーザーとURLから設定を作成
 SyncConfiguration config = new

    SyncConfiguration.Builder(user,
 "realm://realm.example.com/~/userRealm").build();
 
 // 同期されるRealm
 Realm realm = Realm.getInstance(config);
  20. Realm Mobile PlatformରԠ my@realm.io https://github.com/realm/RealmTasks ͷ RealmTasks Android ʹαϯϓϧ͕͋Γ·͢

  21. Realm.init(Context)ͷಋೖ my@realm.io public class MyApplication extends Application {
 @Override
 public

    void onCreate() {
 super.onCreate();
 
 Realm.init(this);
 
 // その他の初期化
 }
 }
  22. RealmLogΫϥε my@realm.io // すべてのロガーを削除 RealmLog.clear(); // 独自のロガーを追加
 RealmLog.add(new AndroidLogger(Log.DEBUG));

  23. ϞσϧΫϥεͷॳظ஋ my@realm.io public class User extends RealmObject {
 @PrimaryKey
 @Required


    public String id = UUID.randomUUID().toString();
 public String name;
 public int age;
 
 public User() {
 this.name = "unknown";
 }
 } String id = UUID.randomUUID().toString();
 User user = realm.createObject(User.class, id);
 print(user.id); // createObjectに渡したidの値
 print(user.name); // "unknown"
  24. ϞσϧΫϥεͷॳظ஋ my@realm.io public class Owner extends RealmObject {
 public String

    name;
 public User user = new User();
 } Owner owner = realm.createObject(Owner.class);
 print(owner.user.id); // モデルクラスが生成したランダムなID
  25. ίϯετϥΫλབྷΈͷόάमਖ਼ my@realm.io public class User extends RealmObject {
 public String

    name;
 public int age;
 
 public User() {}
 
 public User(User user) {
 this.name = user.name; 
 setAge(20);
 }
 
 public void setAge(int age) {
 this.age = age;
 }
 } NullPointerException user͕Ϛωʔδυͷ৔߹ৗʹ0
  26. jp@realm.io realm.where(Foo.class).equalTo(FooFields.AGE, 20); realm.where(Foo.class).equalTo("age", 20) http://bit.ly/RealmField realm.where(Foo::class.java).equalTo(Foo::age.name, 20); Kotlinͷਓ͸ݩʑҎԼͷΑ͏ʹॻ͚ΔͷͰෆཁͰ͢ Realm

    Field Names Helper
  27. Ξϯέʔτͷճ౴Λ͓ئ͍͠·͢ jp@realm.io http://bit.ly/RealmJP_19