将 Backendless 对象指向用户

Point Backendless object to user

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

我正在创建 class:

@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);
     }
}

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

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 和工作流联系起来?

您不需要在对象中扩展任何专门的 Backendless classes save/load to/from Backendless。在 classes 中,您可以使用 public 字段或 getter/setter 属性。您不需要使用任何注释。事情要简单得多。如果你有一个引用 class B 的 class A(通过字段或 javabean 属性),那么在后端,我们将把 A 存储在一个名为 table 的 "A" 和 table 中的 B 称为 "B"。我们还将在后端创建两条记录之间的关系。

您可以通过两种方式处理您使用 Backendless 展示的内容:

正在保存带有首选项的用户对象:

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

这将导致在用户 table 中创建两列:"audioStatus" 和 "backgroundFile"。但是,如果您想在所有首选项所在的地方有一个单独的 table,您可以这样做:

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 );

这将导致在后端创建辅助 table。 table 将被称为 "UserPreferences" - 就像 class 名称一样。 Backendless 还将在用户对象和 UserPreferences table.

中的特定记录之间创建关系

正在检索用户属性

如果用户属性不是通过关系存储的(参见上面的第一个示例),那么当用户登录时它们会立即加载。然后您可以使用 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 )
      {

      }
    });

如果首选项存储在相关 table 中,那么您可以通过多种方式加载它们:

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 )
     {

     }
   });

希望对您有所帮助!