Java 解析中的objectId始终为NULL
在我的活动中,我初始化: 我有这门课Java 解析中的objectId始终为NULL,java,android,parse-platform,Java,Android,Parse Platform,在我的活动中,我初始化: 我有这门课 @ParseClassName("Area") public class Area extends ParseObject { public static ParseQuery<Area> getQuery() { return ParseQuery.getQuery(Area.class); } public String getObjectId() { return getSt
@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);
}
}
总是抛出一个ParseException
:
com.parse.ParseException:java.lang.IllegalStateException:ParseObject没有“objectId”的数据。调用fetchIfNeeded()获取数据
因为ParseObjects实际上没有objectId
。既不在本地数据存储中,也不在直接从解析查询时
这里出了什么问题?我从各种示例中提取了代码,它应该可以工作。删除其中的空构造函数或调用super()。删除其中的空构造函数或调用super()。更新 您已经在子类中包含了objectId的getter。这已经可以从父类访问,不应重写 旧答案 问题可能是本地数据存储中的对象在远程保存以进行解析之前没有objectId。只有这样它才能得到objectId
您需要确保对象已远程保存,或者在查询对象之前需要在本地锁定对象。在固定的情况下,除非objectId也被远程保存,否则无法访问它。更新 您已经在子类中包含了objectId的getter。这已经可以从父类访问,不应重写 旧答案 问题可能是本地数据存储中的对象在远程保存以进行解析之前没有objectId。只有这样它才能得到objectId
您需要确保对象已远程保存,或者在查询对象之前需要在本地锁定对象。在固定的情况下,除非objectId也被远程保存,否则无法访问它。问题是
getString(“objectId”)代码>。您不能实现默认的解析列getter/setters
您可以使用已在ParseObject中实现的getObjectId()
获取它。另外,要获取updatedAt
、createdAt
和其他一些默认的解析列,您必须使用它们自己的getter
,例如getUpdatedAt()
和getCreatedAt()
下面,我删除了您的objectId
getter实现。您应该只实现自己的列字段
@ParseClassName("Area")
public class Area extends ParseObject {
public static ParseQuery<Area> getQuery() {
return ParseQuery.getQuery(Area.class);
}
public String getName() {
return getString("name");
}
public void setName(String name) {
put("name", name);
}
}
@ParseClassName(“区域”)
公共类区域扩展了ParseObject{
公共静态ParseQuery getQuery(){
返回ParseQuery.getQuery(Area.class);
}
公共字符串getName(){
返回getString(“name”);
}
公共void集合名(字符串名){
放置(“名称”,名称);
}
}
问题是getString(“objectId”)代码>。您不能实现默认的解析列getter/setters
您可以使用已在ParseObject中实现的getObjectId()
获取它。另外,要获取updatedAt
、createdAt
和其他一些默认的解析列,您必须使用它们自己的getter
,例如getUpdatedAt()
和getCreatedAt()
下面,我删除了您的objectId
getter实现。您应该只实现自己的列字段
@ParseClassName("Area")
public class Area extends ParseObject {
public static ParseQuery<Area> getQuery() {
return ParseQuery.getQuery(Area.class);
}
public String getName() {
return getString("name");
}
public void setName(String name) {
put("name", name);
}
}
@ParseClassName(“区域”)
公共类区域扩展了ParseObject{
公共静态ParseQuery getQuery(){
返回ParseQuery.getQuery(Area.class);
}
公共字符串getName(){
返回getString(“name”);
}
公共void集合名(字符串名){
放置(“名称”,名称);
}
}
试过了。没有区别。请尝试在自定义应用程序中解析初始化,然后重试。我这边一切都很好。或者您可以在自定义应用程序中发布完整的源代码.parse初始化。你这是什么意思?公共类应用程序扩展了应用程序{@Override public void onCreate(){super.onCreate();Parse.enableLocalDatastore(this);ParseObject.registerSubclass(Custom.class);Parse.initialize(this,Application_ID,CLIENT_KEY);}}和AndroidManifest中的应用程序,谢谢你的提示。但什么都没变,试过了。没有区别。请尝试在自定义应用程序中解析初始化,然后重试。我这边一切都很好。或者您可以在自定义应用程序中发布完整的源代码.parse初始化。你这是什么意思?公共类应用程序扩展了应用程序{@Override public void onCreate(){super.onCreate();Parse.enableLocalDatastore(this);ParseObject.registerSubclass(Custom.class);Parse.initialize(this,Application_ID,CLIENT_KEY);}}和AndroidManifest中的应用程序,谢谢你的提示。但并没有改变任何事情。我的问题是,本地数据存储区内并没有数据。您必须从服务器获取数据,因为有数据。如果我没有registerSubclass
我可以按照我的问题中的描述获取数据。首先更改序列initialize
,然后在enableLocalDatastore
@kishorejethava:从文档:要启用数据存储,请在调用Parse.initialize()之前在应用程序构造函数中调用Parse.enableLocalDatastore()否则会引发异常。您的区域对象是否有另一个db对象作为字段?我的问题是,本地数据存储中可能没有数据。您必须从服务器获取数据,因为有数据。如果我没有registerSubclass
我可以按照我的问题中的描述获取数据。首先更改序列initialize
,然后在enableLocalDatastore
@kishorejethava:从文档:要启用数据存储,请在调用Parse.initialize()之前在应用程序构造函数中调用Parse.enableLocalDatastore()否则会引发异常。您的区域对象是否有另一个db对象作为字段?开始时,我在本地数据存储中没有任何数据。当点击同步并从云端请求数据时,
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);
}
});
@ParseClassName("Area")
public class Area extends ParseObject {
public static ParseQuery<Area> getQuery() {
return ParseQuery.getQuery(Area.class);
}
public String getName() {
return getString("name");
}
public void setName(String name) {
put("name", name);
}
}