2016-06-21 50 views
1

我设置Backendless的应用程序,与具有行名称posts,其为UserPost表之间的数据对象的关系,数据关系是1对多User表。当我尝试使用BackendlessUser.getProperty("key")来检索它时,它会返回零个对象。一旦它甚至返回HashMap。我使用docs中提到的方式,但因为Object[]的大小为零而变为空。我肯定在那一行有数据,写为<uses-permission>的互联网。获得从零个BackendlessUser的getProperty对象()

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

的理由是,勾选“自动加载”,它加载一个的所有值许多关系到其装载所属表时复选框对应,没有被检查。因此,user.getProperty("posts")总是返回null。但要注意的是,如果该行是数据对象的关系,它返回HashMap<String, Object>,所以后需要有构造函数接受HashMap<String, Object>

public Post(HashMap hashMap) 
{ 
    this.hashMap = hashMap; 
    property1 = (String)hashMap.get("property1"); 
    /*other properties*/ 
} 

如果没有价值,它会返回一个Object,这是而不是 castable到任何其他类型,因此在文档中使用的方式必须是才能修复边缘情况。

编辑:

这使得以Backendless任何调用之前有用map data table to class。这样,就可以取消所有使用HashMap的工作并直接获得所需的类型。尽管如此,如果您通过Backendless.Persistence检索数据,您可以将其指定为参数。