使用Parse本地数据存储本地保存额外的数据
问题描述:
我对Parse服务并不熟悉。我只是想知道是否有可能在本地存储上保留一些对象字段,并且不将它们与云同步?使用Parse本地数据存储本地保存额外的数据
想象一下,我们在网络上有一个“引用”对象,我们希望保持应用程序和云之间的引用同步。而且我们在我们的应用中最喜欢保留用户最喜欢的报价。
此外,我们不想保留收藏夹与云同步。我们是否可以在本地数据存储上拥有“已加星标”的属性/字段,并将此属性/字段保存在本地存储中并防止与云同步?
如果这是可能的,请示范如何做到这一点。谢谢。
答
我在使用parse时遇到了同样的问题。
在我的情况下,我有餐馆目录应用程序,它允许用户为一些餐馆添加书签,以便离线查看它们。所以我想在本地存储每家餐厅的“加入书签”标志。这样的标志属于个人用户,我不想将这个标志与解析类同步。为了同步目的,我已经与User类中的餐馆有关系。
我发现,如果我只是用一个没有存储在云中的密钥(即不是该类的列)将一些数据放入ParseObject并将该对象固定在本地,则这些数据将被保存在本地并且将会注释同步,直到我故意同步餐厅与云。但是,当您执行查询'fromLocalDatastore()'时,您只能使用ParseObject检索此类本地数据。这里是我的代码:
在这里,我的书签餐厅
ParseUser user = ParseUser.getCurrentUser();
restaurant.setBookmarked(doBookmark);
if (doBookmark) {
UserHelper.bookmarksRelation(user).add(restaurant);
restaurant.pinInBackground(ParseRestaurant.BOOKMARKED_PIN);
} else {
UserHelper.bookmarksRelation(user).remove(restaurant);
restaurant.unpinInBackground(ParseRestaurant.BOOKMARKED_PIN);
}
user.saveEventually();
ParseRestaurant:
public class ParseRestaurant extends ParseObject {
...
public static final String LOCAL_KEY_BOOKMARKED = "bookmarked";
...
public Boolean isBookmarked() {
return (containsKey(LOCAL_KEY_BOOKMARKED)) ? getBoolean(LOCAL_KEY_BOOKMARKED) : false;
}
public ParseRestaurant setBookmarked(Boolean bookmarked) {
put(LOCAL_KEY_BOOKMARKED, bookmarked);
return this;
}
...
}
时,我查询餐厅的详细信息,其数据来自有或无结果“书签”国旗,正如我所需要的:
@Override public Observable<ParseRestaurant> getRestaurant(@NonNull final String restaurantId) {
return Observable.create(new RxUtils.OnSubscribeParse<ParseRestaurant>() {
@Override public ParseRestaurant just() throws ParseException {
ParseRestaurant restaurant = ParseRestaurant.createWithoutData(restaurantId);
try {
restaurant.fetchFromLocalDatastore();
Timber.d("Restaurant is cached locally :)");
return restaurant;
} catch (ParseException unnecessary) {
Timber.d("Restaurant is not cached locally :(");
}
restaurant.fetchIfNeeded();
restaurant.pinInBackground(ParseRestaurant.TEMPORARY_DETAILED_PIN);
return restaurant;
}
}).subscribeOn(Schedulers.io());
}