【问题标题】:What is the best way to use List<String> in Realm Android?在 Realm Android 中使用 List<String> 的最佳方法是什么?
【发布时间】:2016-10-01 09:21:49
【问题描述】:

我在 Realm Android 中使用 RealmString 替代 List 。 但我对 RealmChangeListener 有疑问。在下面的示例中,我在许多模型中使用 RealmString,例如 Dog、Cat、Chicken。 但是,当该数据中的任何人更改数据时,所有数据都会更改。

例如:当我保存 Dog -> Dog Change 和 Cat Change 时。

我可以通过使用 RealmDogString、RealmCatString、RealmChickenString 来解决这个问题,但它会重复我的代码。有没有更好的解决方案?

这是我的示例代码:

public class RealmTestActivity extends AppCompatActivity {
    private Context context;
    private Realm realm;

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

        Stetho.initialize(
            Stetho.newInitializerBuilder(this)
                .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                .enableWebKitInspector(RealmInspectorModulesProvider.builder(this).build()).build());

        context = this;

        RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).build();
        Realm.setDefaultConfiguration(realmConfig);
        realm = Realm.getDefaultInstance();

        final RealmResults<Dog> puppies = realm.where(Dog.class).lessThan("age", 2).findAll();
        puppies.addChangeListener(new RealmChangeListener<RealmResults<Dog>>() {
          @Override
          public void onChange(RealmResults<Dog> results) {
            System.out.println("XXX Dog ::" + puppies.size());
            Toast.makeText(context, "Dog Change", Toast.LENGTH_SHORT).show();
            puppies.size();
          }});


        final RealmResults<Cat> puppiesCat = realm.where(Cat.class).lessThan("age", 2).findAll();
        puppiesCat.addChangeListener(new RealmChangeListener<RealmResults<Cat>>() {
          @Override
          public void onChange(RealmResults<Cat> results) {
            System.out.println("XXX Cat  ::" + puppiesCat.size());
            Toast.makeText(context, "Cat Change", Toast.LENGTH_SHORT).show();
          }
        });
    }

    public void saveDog(View view) {
        Dog dog = new Dog();
        dog.setName("Bella");
        dog.setAge(1);
        RealmList<RealmString> realmStrings = new RealmList<RealmString>();
        RealmString realmString = new RealmString();
        realmString.setValue("link_Bella.png");
        realmStrings.add(realmString);
        dog.setImage(realmStrings);

        realm.beginTransaction();
        realm.copyToRealm(dog);
        realm.commitTransaction();
    }

    public void saveCat(View view) {
        Cat cat = new Cat();
        cat.setName("Oliver");
        cat.setAge(1);
        RealmList<RealmString> realmStrings_2 = new RealmList<RealmString>();
        RealmString realmString_2 = new RealmString();
        realmString_2.setValue("link_Oliver.png");
        realmStrings_2.add(realmString_2);
        cat.setImage(realmStrings_2);
        realm.beginTransaction();
        realm.copyToRealm(cat);
        realm.commitTransaction();
    }
}

【问题讨论】:

  • 不是答案,但如果您可以将上述内容添加到github.com/realm/realm-java/issues/575,我们将不胜感激
  • 感谢@geisshirt。但我不能发帖,因为在 GitHub 上说“此对话已被锁定并仅限于合作者”。
  • 很抱歉给您带来不便。我有权解锁对话 :-) 我已将问题中的链接添加到此处。
  • 谢谢@geisshirt,你可以为我做这件事:)
  • 您应该将List&lt;String&gt; 存储为单个字符串字段。

标签: android realm


【解决方案1】:

Realm for Android 支持 4.0.0 版本的原语列表:https://github.com/realm/realm-java/issues/575

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2018-07-09
    • 2022-08-16
    • 1970-01-01
    • 2019-05-03
    • 2014-10-14
    相关资源
    最近更新 更多