Android Realm - Accessing Realm Object from Service

后端 未结 2 979
野趣味
野趣味 2021-01-13 19:54

I have a realm object that is created in my activity. I need to be able to access this object within a service that I created. However I\'m getting the error when creating t

相关标签:
2条回答
  • 2021-01-13 20:30

    Technically you're supposed to open the Realm instance at the beginning of the background thread, close it at the end of execution in that background that, and pass it to methods in between.

    public void handleIntent() { // or doInBackground etc
        Realm realm = null;
        try {
             realm = Realm.getDefaultInstance();
             .... 
             MyObj obj = realm.where(MyObj.class)
                              .equalTo(MyObjFields.ID, myObjId)
                              .findFirst(); // get by id
             .... 
        } finally {
             if(realm != null) {
                  realm.close(); // important 
             } 
        } 
    } 
    

    Using realm.copyFromRealm() is a workaround, not a solution.


    With AS 3.0, you can actually use try-with-resources no matter what your minSDK is (just like if you were using Retrolambda):

    public void handleIntent() { // or doInBackground etc
        try(Realm realm = Realm.getDefaultInstance()) {
             .... 
             MyObj obj = realm.where(MyObj.class)
                              .equalTo(MyObjFields.ID, myObjId)
                              .findFirst(); // get by id
             .... 
        } // auto-close
    } 
    
    0 讨论(0)
  • 2021-01-13 20:31

    You can try to use realm.copyFromRealm(youRealmObject);. These method copy Realm data into normal Java objects and detaching them from Realm.

    Here is the example of usage:

    youRealmObject = realm.copyFromRealm(youRealmObject);
    

    Here is the information about it from docs:

    Makes a standalone in-memory copy of an already persisted RealmObject. This is a deep copy that will copy all referenced objects. The copied object(s) are all detached from Realm so they will no longer be automatically updated. This means that the copied objects might contain data that are no longer consistent with other managed Realm objects. WARNING: Any changes to copied objects can be merged back into Realm using copyToRealmOrUpdate(RealmObject), but all fields will be overridden, not just those that were changed. This includes references to other objects, and can potentially override changes made by other threads.

    https://realm.io/docs/java/latest/api/io/realm/Realm.html#copyFromRealm-E-

    0 讨论(0)
提交回复
热议问题