使用Parse本地数据存储保留额外的数据

时间:2014-12-01 19:26:32

标签: android parse-platform

我对Parse服务并不熟悉。我只是想知道是否可以在本地存储上保留一些对象字段而不是将它们与云同步?

想象一下,我们有一个"引用"网络上的对象,我们希望在应用和云之间保持同步报价。我们在应用程序中最喜欢的部分是分别保留用户喜欢的引号。

另外,我们不希望保持收藏与云同步。我们可以拥有像#34;已加星标的"在本地数据存储上,并将此属性/字段保留在本地存储中,并防止它与云同步?

如果可以,请告诉我如何在一个例子中做到这一点。谢谢。

1 个答案:

答案 0 :(得分:1)

我在使用解析时遇到了同样的问题。

在我的情况下,我有餐厅目录应用程序,允许用户为一些餐厅添加书签,以便离线查看。所以我想在本地存储每个餐馆的“书签”标记。这样的标志属于个人用户,我不想将此标志与解析类同步。我已经在User类中与餐馆有关系以进行同步。

我发现如果我只是用一个没有存储在云中的键(即不是类的列)将一些数据放到ParseObject中并在本地固定该对象,这些数据将被保存在localy并注意同步直到我故意将餐厅与云同步。但是,当您执行查询'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());
}