在Realm数据库解决方案中,如何获得性能最佳的最新插入项?
此代码是我解决该问题的解决方案
List<Transactions> allItems = realm.where(Transactions.class).findAll().sort("createdAt", Sort.DESCENDING);
String latestId = allItems.get(0).getId();
getUserLatestTransactions(Integer.parseInt(latestId));
还有其他解决方案或Realm实现了吗?
答案 0 :(得分:10)
以下是您可以做的事情 - 考虑到Realm读取不会复制,这意味着它不贵并且不会对您的UI线程产生太大影响,在存储您的项目后,您可以findAllSorted("id")
或last()
,然后使用//after commitTransaction,
RealmResults<Transactions> allTransactions = realm.where(Transactions.class).findAllSorted("createdAt");
//If you have an incrementing id column, do this
long lastInsertedId = allTransactions.last().getId();
方法找到最后一个id:
public class Transactions extends RealmObject{
@PrimaryKey @Index
private long id;
//getters and setters accordingly!
}
这应该为您提供给定模型的最后插入ID。
同样重要的是要提到这一点,你必须在你的模型中有一个像id这样的列;
realm.copyToRealm(obj)
我希望这有帮助!祝你好运,编码愉快!
更新
我刚刚意识到realm.beginTransaction();
Transactions transaction = realm.copyToRealm(newTransaction);
long id = transaction.getId();
realm.commitTransaction();
会返回一个对象!
这意味着您可以简单地执行此操作:
func loadPic(prevImage: UIImageView){
//... get URL; result in object["data"]
let fileUrl = NSURL(string: object["data"] as! String)
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: fileUrl!)
let task = session.dataTaskWithRequest(request){
(data, response, error) -> Void in
if error != nil {
print(error!.localizedDescription)
} else {
var imagePic: UIImageView?
let imageData = NSData(data: data!)
dispatch_async(dispatch_get_main_queue(), {
prevImage.removeFromSuperview()
let image: UIImage = UIImage(data: imageData)!
imagePic = UIImageView(image: image)
imagePic?.contentMode = .ScaleAspectFit
self.view.addSubview(imagePic!)
//... alignment
})
}
}
task.resume()
//...
}
请尝试一下,让我知道!
答案 1 :(得分:0)
如果Id是唯一的&amp;增量你可以按它排序或将时间作为长值并按上述方式执行它应该有效。
答案 2 :(得分:0)
交易项目= realm.where(Transactions.class).findAll()。last()
注意:如果只想获取最后的插入数据,则没有排序方法
答案 3 :(得分:0)
val obj = realm.where<Transactions>()
.sort("createdAt", Sort.DESCENDING)
.findFirst()
if(obj != null){
val latestId = obj.id
}