【发布时间】:2015-12-24 22:31:11
【问题描述】:
在我的活动中,我初始化了Parse service:
Parse.enableLocalDatastore(getApplicationContext());
ParseObject.registerSubclass(Person.class);
ParseObject.registerSubclass(Area.class);
Parse.initialize(this, "MY_APP_ID", "MY_CLIENT_KEY");
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
defaultACL.setPublicReadAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
我有这门课
@ParseClassName("Area")
public class Area extends ParseObject {
public static ParseQuery<Area> getQuery() {
return ParseQuery.getQuery(Area.class);
}
public String getObjectId() {
return getString("objectId");
}
public String getName() {
return getString("name");
}
public void setName(String name) {
put("name", name);
}
}
首先我想像这样从 Parse 服务中检索数据
ParseQuery<Area> areaQuery = Area.getQuery();
areaQuery.findInBackground(new FindCallback<Area>() {
public void done(List<Area> areas, ParseException e) {
if (e == null) {
ParseObject.pinAllInBackground(areas,
new SaveCallback() {
public void done(ParseException e) {
//output errors
}
});
} else {
//output errors
}
}
});
但是 ParseObjects 没有objectId。
稍后我想像这样从本地数据存储中检索数据
ParseQuery<Area> query = Area.getQuery();
query.orderByAscending("name");
query.fromLocalDatastore();
query.findInBackground(new FindCallback<Area>() {
public void done(List<Area> areaList, ParseException e) {
if (e != null) {
Log.d("area", "Error retrieving areas");
return;
}
for (Area a : areaList)
areaResults.add(a);
}
});
那总是抛出一个ParseException:
com.parse.ParseException: java.lang.IllegalStateException: ParseObject 没有“objectId”的数据。调用 fetchIfNeeded() 获取数据。
因为 ParseObjects 实际上没有objectId。无论是在我的本地数据存储中,还是直接从 Parse 查询时。
这里出了什么问题?我从各种示例中获取了代码,它应该可以工作。
【问题讨论】:
-
我的本地数据存储中没有数据。你必须从服务器获取数据
-
有数据。如果我不
registerSubclass我可以得到我的问题中描述的数据。 -
先更改顺序
initialize后enableLocalDatastore -
@kishorejethava:来自文档:要启用数据存储,请在调用 Parse.initialize() 之前在应用程序构造函数中调用 Parse.enableLocalDatastore() 否则会引发异常。
-
您的 Area 对象是否有另一个 db 对象作为字段?
标签: java android parse-platform