小编Tus*_*ale的帖子

无法在写入事务 Realm Android 之外修改托管对象

我在更新领域对象时遇到问题。我有4个片段。我将值从一个片段传送到下一个片段。共有 16 个字段。第一个片段包含 4,依此类推。首先,我使用此方法保存 4 个前四个字段的对象:-

public static <T extends RealmObject> void InsertRecordinRealm(final Class<T> clazz, final T passedObject, final Integer integerd) {
    Realm realm = getRealmInstance();
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            realm.copyToRealmOrUpdate(passedObject);
        }
    });
    realm.close();
}
Run Code Online (Sandbox Code Playgroud)

现在,我使用此方法将值从第一个片段获取到第二个片段:-

public static <T extends RealmObject> T GetRecordById(Class<T> clazz, Integer id) {
    RealmQuery<T> queryForUsern = getRealmInstance().where(clazz).equalTo("RealmId", 1);
    T recordByid = queryForUsern.findFirst();
    return recordByid;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我正确地获取了对象。但是当我使用第二个片段的值更新对象时,我收到此错误“无法在写事务之外修改托管对象”

在第二个片段中,我正在使用以下内容更新对象:-

public static <T extends RealmObject> void UpdateRecordinRealmByID(final T passedObject, final Class<T> clazz, final Integer …
Run Code Online (Sandbox Code Playgroud)

android realm android-fragments

5
推荐指数
1
解决办法
9865
查看次数

如何在工作管理器中访问房间数据库以定期同步?

我想定期同步 Room 数据库。我正在使用工作管理器来做到这一点。我已经创建了定期工作请求,并且想要发送带有 的表格setInputData(TABLE HERE..)。我想知道我是否做得对。如果正确,我如何定期将表格发送给工作经理?如果错误,请帮我提供合适的解决方案。

这是我的代码:

//schedule recurring task only once
//Fragment
    if(!SessionManager.getBoolenFromPreferences(getActivity(),REFRESH_ATTENDANCE)){
        attendanceViewModel.setupPeriodicRefreshWork();
        SessionManager.putBoolenInPreferences(getActivity(), true, REFRESH_ATTENDANCE);
    }

//view model
public void setupPeriodicRefreshWork() {
    AttendanceScheduler.refreshWork();
}

//Scheduler
public static void refreshWork() {

    //define constraints
    Constraints myConstraints = new Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build();

  //How to Set Data Here ?
    Data source = new Data.Builder()
            .put(HERE)
            .build();

    PeriodicWorkRequest refreshWork =
            new PeriodicWorkRequest.Builder(AttendanceWorker.class, 1, TimeUnit.HOURS)
                    .setConstraints(myConstraints)
                    .setInputData(source)
                    .build();

    WorkManager.getInstance().enqueue(refreshWork);
}
Run Code Online (Sandbox Code Playgroud)

这是我的工人代码:

public class AttendanceWorker extends Worker {

    private Executor executor;
    private static …
Run Code Online (Sandbox Code Playgroud)

android mvvm android-room android-architecture-components android-workmanager

5
推荐指数
0
解决办法
3222
查看次数