我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 ParseQueryquery = ParseQuery.getQuery(ParseClass.PERSON_CLASS); query.whereEqualTo(ParseKey.PERSON_PHONE_NUMBER_KEY, phoneNumber); query.fromLocalDatastore(); query.findInBackground(new FindCallback () { public void done(List 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
博客文章中读到了它,但我不完全理解如何使用我已经拥有的方法,以及如何同步查询要一个接一个地执行.
如果有人使用此库,请指导我如何执行此操作或提供一些基本示例,以便我了解工作流程.
谢谢!