从BackendlessUser获取零对象getProperty()

时间:2016-06-21 20:51:00

标签: java android backendless

我设置了Backendless app,User表的行名为posts,这是UserPost表之间的数据对象关系,数据关系为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;
    }
}

1 个答案:

答案 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检索数据,则可以将其指定为参数。