首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Parse本地数据存储将额外数据保留在本地

问使用Parse本地数据存储将额外数据保留在本地
EN

Stack Overflow用户
提问于 2014-12-02 03:26:32
回答 1查看 140关注 0票数 0

我对Parse服务不是很熟悉。我只是想知道,是否有可能将一些对象字段保存在本地存储中,而不与云同步?

假设我们在网络上有一个"Quote“对象,我们希望在应用程序和云之间保持报价同步。我们在我们的应用程序中有最喜欢的部分,可以单独保存用户最喜欢的报价。

另外,我们不想让收藏夹与云保持同步。我们是否可以在本地数据存储上有像"starred“这样的属性/字段,并将此属性/字段仅保留在本地存储中,并防止其与云同步?

如果这是可能的,请告诉我如何做到这一点的例子。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-05-07 01:55:18

我现在在使用parse时也遇到了同样的问题。

在我的案例中,我有一个餐厅目录应用程序,允许用户将一些餐厅加入书签,以便离线查看它们。因此,我希望在本地存储每个餐厅的“书签”标志。这样的标志属于一个单独的用户,我不想将这个标志与parse类同步。出于同步的目的,我已经在User类中建立了与restaurants的关系。

我发现,如果我简单地将一些数据放到没有存储在云中的关键字(即不是类的列)的ParseObject中,并将此对象固定在本地,这些数据将保存在本地,并会注意到已同步,直到我有意将餐厅与云同步。但只有在查询'fromLocalDatastore()‘时,才能使用ParseObject检索此类本地数据。下面是我的代码:

我在这里给一家餐厅加了书签

代码语言:javascript
复制
  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:

代码语言:javascript
复制
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;
    }
    ...
}

在结果中,当我查询餐厅的详细信息时,它的数据带有或不带有“书签”标志,正如我所需要的:

代码语言:javascript
复制
@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());
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27235694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档