我以为我遵循了推荐的领域方法来运行异步数据插入,如下所示:
public void addCustomer(final Customer customer) {
Realm insertRealm = Realm.getDefaultInstance();
insertRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm backgroundRealm) {
long id = customerPrimaryKey.incrementAndGet();
customer.setId(id);
backgroundRealm.copyToRealm(customer);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
Log.d(LOG_TAG, "Customer Added");
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
Log.d(LOG_TAG, error.getMessage());
}
});
insertRealm.close();
}
但是,当我运行上面的代码时,我得到“您的领域是从没有Looper的线程打开的,并且您提供了回调,我们需要一个处理程序来调用您的回调”
我在一个非活动类中运行这段代码,我在这里做错了什么,我该如何修复它。谢了。
事实证明这个查询没有问题,问题是我是从IntentService调用它的。我试图在应用程序首次运行时植入数据库,所以我像这样解决了这个问题:
protected void onHandleIntent(Intent intent) {
Realm realm = Realm.getDefaultInstance();
//Add sample Customers to database
List<Customer> customers = SampleCustomerData.getCustomers();
realm.beginTransaction();
for (Customer customer: customers){
customer.setId(customerPrimaryKey.getAndIncrement());
realm.copyToRealm(customer);
}
realm.commitTransaction();
realm.close();
}
该修复,在意向服务之外,从 UI 线程调用查询时工作正常。
您需要从UI线程调用addCustomer。
Realm依赖于Hanfler和Looper类的Android线程通信。看起来你从另一个后台线程查询异步操作(为什么?,它已经在后台,使用同步版本)。要解决此问题,您需要使用活动循环器的线程。使用处理程序线程作为后台线程 - 它将初始化Looper
为了为了
insertRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm backgroundRealm) {
//...
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
// !!!
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
// !!!
}
});
要在后台线程上调用的异步事务回调,该线程需要与循环器相关联(因此具有可以与该循环器的线程进行通信的处理程序)。
解决方案,在后台线程上使用同步事务。
但你已经明白了。
protected void onHandleIntent(Intent intent) {
Realm realm = null;
try {
realm = Realm.getDefaultInstance();
final List<Customer> customers = SampleCustomerData.getCustomers();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
for (Customer customer: customers){
customer.setId(customerPrimaryKey.getAndIncrement());
realm.insert(customer);
}
}
});
} finally {
if(realm != null) {
realm.close();
}
}
}
Realm中的以下Swift 3.0对象相当于什么? 常规雨燕 商店类别: 项目类别: 领域 我试过这个,但我得到一个错误: 错误:属性无法标记为动态,因为它的类型无法在Objective-C中表示 物品类别:没有错误
Java抛出某种类型的“Java.lang.IllegalAccessError类SomeJavassistProxy(在未命名模块中)无法访问类Java.lang.Reflect.Method(在模块Java.base中),因为模块Java.base不将Java.lang.Reflect导出到未命名模块”。 这是预期的行为。 然后我尝试了bytebuddy库,它生成了以下类:
我想附加到 WebSphere JVM 并获取有用的数据,如垃圾回收器的名称及其收集计数、线程计数、堆/非堆内存使用情况、JVM 正常运行时间等。但是,此链接提供了 WebSphere JVM 中可用的 MBean 列表 - http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.javad
问题内容: 当我尝试从Realm数据库中获取对象时,该应用程序崩溃了,并且出现以下错误: 这是我的活动 这是模型 有人知道如何解决它?公共类Haltes实现RealmModel { } 问题答案: 我的问题通过在所有其他插件之后声明来解决。 应用级Gradle
问题内容: 当我打电话给 它抛出exepiton:这是错误 这是我的应用程序类 这是我的境界模型 这是我尝试检索模型的地方 gradle配置: 我尝试了所有可以在堆栈上找到的内容: 清理构建,重建项目,启用注释处理器,重新安装apk,使缓存无效/重新启动 问题答案: 问题在gradle文件中。仅使用插件的排序规则的问题,由于@EpicPandaForce的评论,问题已解决,我正在写答案,以帮助其他