将 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 )
{
}
});
希望对您有所帮助!
我正在从 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 )
{
}
});
希望对您有所帮助!