从 BackendlessUser getProperty() 获取零个对象

getting zero objects from BackendlessUser getProperty()

我设置了 Backendless 应用程序,其中 User table 具有行名称 posts,这是 UserPost 之间的数据对象关系 tables,数据关系是1对多。当我尝试使用 BackendlessUser.getProperty("key") 检索它时,它 returns 零个对象。一旦它甚至返回 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 class:

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

原因是复选框 "autoload" 没有被选中,它加载了当拥有者 table 被加载时复选框对应的一对多关系的所有值。因此,user.getProperty("posts") 总是 returning null。但需要注意的是,如果行是数据对象关系,它return是HashMap<String, Object>,所以Post需要有接受HashMap<String, Object>的构造函数:

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

如果没有值,它将return一个Object不是 castable任何其他类型,所以文档中使用的方式 必须 应用以修复边缘情况。

编辑:

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