我设置了Backendless app,User
表的行名为posts
,这是User
和Post
表之间的数据对象关系,数据关系为1到许多。当我尝试使用BackendlessUser.getProperty("key")
检索它时,它返回零对象。一旦它返回HashMap
。我使用了docs中提到的方法,但是因为Object[]
的大小为零而得到null。我确实在该行中有数据,为互联网写了<uses-permission>
。
public class MainActivity extends AppCompatActivity {
BackendlessUser user = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Backendless.initApp(this, "app_id", "android_key", "v1");
Backendless.UserService.login("username", "password", new AsyncCallback<BackendlessUser>() {
@Override
public void handleResponse(BackendlessUser response) {
user = response;
doStuff();
}
@Override
public void handleFault(BackendlessFault fault) {
Log.e("Error logging in", "message: " + fault.getMessage());
}
});
}
//important
private void doStuff() {
Object[] postObjectArray = (Object[]) user.getProperty("posts");
Post[] posts = null;
if (postObjectArray != null && postObjectArray.length > 0)
posts = (Post[])postObjectArray;
if (posts == null)
{
Log.d("Problems", "posts is null");
}
}
}
Post
上课:
public class Post extends Object{
private BackendlessUser user;
private String file;
private String message;
private String objectId;
public String getObjectId() {
return objectId;
}
public void setObjectId(String objectId) {
this.objectId = objectId;
}
public Post() {
}
public Post(BackendlessUser user, String file, String message) {
this.user = user;
this.file = file;
this.message = message;
}
public BackendlessUser getUser() {
return user;
}
public void setUser(BackendlessUser user) {
this.user = user;
}
public String getFile() {
return file;
}
public void setFile(String file) {
this.file = file;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
答案 0 :(得分:0)
原因是复选框“autoload”,它加载了加载拥有表时复选框对应的一对多关系的所有值。因此,user.getProperty("posts")
始终返回null。但应该注意的是,如果行是数据对象关系,则返回HashMap<String, Object>
,因此Post需要具有接受HashMap<String, Object>
的构造函数:
public Post(HashMap hashMap)
{
this.hashMap = hashMap;
property1 = (String)hashMap.get("property1");
/*other properties*/
}
如果没有值,则会返回Object
,不可投弃到任何其他类型,因此文档中使用的方式必须应用以修复边缘情况。
修改强>
在对Backendless进行任何调用之前,它对map data table to class很有用。这样,可以使用HashMap
消除所有工作并直接获得所需类型。尽管如此,如果您通过Backendless.Persistence
检索数据,则可以将其指定为参数。