java - 从 BackendlessUser getProperty() 获取零个对象

标签 java android backendless

我已经设置了 Backendless 应用程序,其中 User具有行名称 posts 的表,这是 User 之间的数据对象关系和Post表,数据关系是一对多。当我尝试使用 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;
    }
}

最佳答案

原因是未选中“自动加载”复选框,该复选框会在加载所属表时加载与该复选框对应的一对多关系的所有值。因此,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 ,它不能转换为任何其他类型,因此必须应用文档中使用的方式来修复边缘情况。

编辑:

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

关于java - 从 BackendlessUser getProperty() 获取零个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954345/

相关文章:

ios - Backendless swift 如何从 MBAAS 存储加载对象

android - PhoneGap Platfrom 创建的 APK 文件是否可以在 ios 中运行?

javascript - 我正确使用 Promise.all 吗?

java - Java 中 URLEncoder 的意外输出

java - 多线程和死锁

android - 根据麦克风输入振动Android手机

java - 在 NavigationDrawer 中单击按钮打开 Activity

python - 无法从 JSON 结果中检索值

java - 如果使用 transient 对象值,Dto 类不会创建 mysql 数据库表

java - 在 Eclipse 中,调试 TestNG 中不同组的配置