【问题标题】:Point Backendless object to user [closed]将 Backendless 对象指向用户[关闭]
【发布时间】:2016-02-01 15:41:17
【问题描述】:

我正在从 Parse 迁移到 Backendless,目前正在尝试用 Parse 做一些非常明显的事情。

我正在创建一个类:

@ParseClassName("UserPreferences")
public class UserPreferences extends ParseObject {

     public ParseFile getBackground(){
         return getParseFile("background.jpg");
     }

     public boolean getAudioStatus(){
         return getBoolean("audio");
     } 
     public void setAudioStatus(boolean status){
     put("audio", status);
     }
}

现在我想将这个类作为指针分配给当前登录的用户:

UserPreferences userPrefs = new UserPreferences();
userPrefs.setAudioStatus(true);
ParseUser user = ParseUser.getCurrentUser();
user.put("prefs", userPrefs);

userPrefs.saveInBackground() 
user.saveInBackground();  //again, use SaveCallback

并检索所有值等以应用于本地首选项:

ParseUser user = ParseUser.getCurrentUser();
UserPreferences userPrefs = user.getParseObject("prefs");
userPrefs.fetchInBackground(); 

这样,用户的数据总是与他自己绑定,objectID等不是问题。

现在我在使用 Parse 时没有自己解决这个问题。所以不幸的是,我不能真正谈论这件事。我只是希望更有经验的人看到我在做什么,并且可以将其与以某种方式将其转换为 Backendless SDK 和工作流相关联?

【问题讨论】:

    标签: android parse-platform backendless


    【解决方案1】:

    您不需要在您保存/加载到/从 Backendless 的对象中扩展任何专门的 Backendless 类。在类中,您可以使用公共字段或 getter/setter 属性。您不需要使用任何注释。事情要简单得多。如果您有一个引用类 B 的类 A(通过字段或 javabean 属性),那么在后端,我们会将 A 存储在名为“A”的表中,将 B 存储在名为“B”的表中。我们还将在后端的两条记录之间创建关系。

    有两种方法可以处理您使用 Backendless 显示的内容:

    使用偏好保存用户对象:

    BackendlessUser user = Backendless.UserService.CurrentUser();
    user.setProperty( "audioStatus", true );
    user.setProperty( "backgroundImageUrl", url-to-background-jpg );
    Backendless.UserService.save( user, asyncCallback );
    

    这将导致在用户表中创建两列:“audioStatus”和“backgroundFile”。但是,如果您想要一个单独的表来存放所有首选项,您可以这样做:

    public class UserPreferences 
    {
      // or use Java bean getter/setter instead of fields
      public String backgroundImageUrl;
      public boolean audioStatus;
    }
    
    UserPreferences prefs = new UserPreferences();
    prefs.backgroundImageUrl = url-to-background-jpg;
    prefs.audioStatus = true;    
    BackendlessUser user = Backendless.UserService.CurrentUser();
    user.setProperty( "userPrefs", prefs );
    Backendless.UserService.save( user, asyncCallback );
    

    这将导致在后端创建一个辅助表。该表将被称为“UserPreferences”——就像类名一样。 Backendless 还会在用户对象和 UserPreferences 表中的特定记录之间创建关系。

    检索用户属性

    如果用户属性不是通过关系存储的(参见上面的第一个示例),那么它们会在用户登录时立即加载。然后您可以使用 getProperty 方法获取属性:

     Backendless.UserService.login( userName, password, new AsyncCallback<BackendlessUser>()
        {
          @Override
          public void handleResponse( BackendlessUser user )
          {
            boolean audioStatus = (boolean) user.getProperty( "audioStatus" );
            String fileUrl = (String) user.getProperty( "backgroundImageUrl" );
          }
    
          @Override
          public void handleFault( BackendlessFault backendlessFault )
          {
    
          }
        });
    

    如果首选项存储在相关表中,那么您有几个选项可以加载它们:

    BackendlessUser user = Backendless.UserService.CurrentUser();
    ArrayList<String> relations = new ArrayList<String>();
    relations.add( "userPrefs" ); // name of the relation column in Users
    Backendless.Data.of( BackendlessUser.class ).loadRelations( user, relations, new AsyncCallback<BackendlessUser>()
       {
         @Override
         public void handleResponse( BackendlessUser user )
         {
           // user - object with loaded relations. 
           // now you can do this:
           UserPreferences prefs = (UserPreferences)user.getProperty( "userPrefs" );
         }
    
         @Override
         public void handleFault( BackendlessFault backendlessFault )
         {
    
         }
       });
    

    希望这会有所帮助!

    【讨论】:

    • 优秀的标记。无法要求更好的解释!感谢您提供优质的服务和支持。
    猜你喜欢
    • 2013-01-14
    • 2018-01-02
    • 1970-01-01
    • 2019-04-05
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2021-05-24
    相关资源
    最近更新 更多