我Parse.com
用作我的应用程序的后端。他们还提供了一个本地数据库来存储信息,作为SQLite
.
我想通过解析将电话中的号码添加到我的数据库中。在添加数字之前,我需要检查该数字是否已存在于数据库中,因此我使用findInBackground()
来获取与我要添加的数字匹配的数字列表。如果列表为空,则我要添加的数字在数据库中不存在。
这样做的方法是:
public void putPerson(final String name, final String phoneNumber, final boolean isFav) {
// Verify if there is any person with the same phone number
ParseQuery<ParseObject> query = ParseQuery.getQuery(ParseClass.PERSON_CLASS);
query.whereEqualTo(ParseKey.PERSON_PHONE_NUMBER_KEY, phoneNumber);
query.fromLocalDatastore();
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> personList,
ParseException e) {
if (e == null) {
if (personList.isEmpty()) {
// If there is not any person with the same phone number add person
ParseObject person = new ParseObject(ParseClass.PERSON_CLASS);
person.put(ParseKey.PERSON_NAME_KEY, name);
person.put(ParseKey.PERSON_PHONE_NUMBER_KEY, phoneNumber);
person.put(ParseKey.PERSON_FAVORITE_KEY, isFav);
person.pinInBackground();
Log.d(TAG,"Person:"+phoneNumber+" was added.");
} else {
Log.d(TAG, "Warning: " + "Person with the number " + phoneNumber + " already exists.");
}
} else {
Log.d(TAG, "Error: " + e.getMessage());
}
}
}
);
}
然后我调用这个方法3次添加3个数字:
ParseLocalDataStore.getInstance().putPerson("Jack", "0741234567", false);
ParseLocalDataStore.getInstance().putPerson("John", "0747654321", false);
ParseLocalDataStore.getInstance().putPerson("Jack", "0741234567", false);
ParseLocalDataStore.getInstance().getPerson(); // Get all persons from database
请注意,第三个数字与第一个数字相同,不应将其添加到数据库中。但logcat
节目:
12-26 15:37:55.424 16408-16408/D/MGParseLocalDataStore: Person:0741234567 was added.
12-26 15:37:55.424 16408-16408/D/MGParseLocalDataStore: Person:0747654321 was added.
12-26 15:37:55.484 16408-16408/D/MGParseLocalDataStore: Person:0741234567 was added.
第三个数字即使不应该这样做也被添加了,因为fintInBackground()
几乎同时在3个后台线程中运行,所以它会发现数据库中没有我想要添加的数字。
在这个问题中,一个人告诉我我应该使用Bolts
来自Parse
. 我从这里和一些博客文章中阅读了它Parse
,但我不完全理解如何将它与我已有的方法一起使用,以及如何同步要一个接一个地执行的查询。
如果有人使用此库,请指导我如何执行此操作或提供一些基本示例,以便我了解工作流程。
谢谢!