使用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()); 
}