Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析中的objectId始终为NULL_Java_Android_Parse Platform - Fatal编程技术网

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