Android 当我可以得到其他字段的值时,为什么关系查询中的objectId总是返回null?
我试图从查询中获取指针的objectId。从指针获取objectId是可行的,但从自定义指针获取objectId是不可行的,尽管我可以毫无问题地访问指针中的其他字段 下面我将对我尝试过的不同方法进行评论,以及哪些方法有效,哪些方法无效。你知道会出什么问题吗Android 当我可以得到其他字段的值时,为什么关系查询中的objectId总是返回null?,android,parse-platform,Android,Parse Platform,我试图从查询中获取指针的objectId。从指针获取objectId是可行的,但从自定义指针获取objectId是不可行的,尽管我可以毫无问题地访问指针中的其他字段 下面我将对我尝试过的不同方法进行评论,以及哪些方法有效,哪些方法无效。你知道会出什么问题吗 ParseQuery<ParseObject> testQuery = ParseQuery.getQuery("Sell"); testQuery.whereEqualTo("user", ParseUser.getCurren
ParseQuery<ParseObject> testQuery = ParseQuery.getQuery("Sell");
testQuery.whereEqualTo("user", ParseUser.getCurrentUser()); // A Pointer<_User> field.
testQuery.include("user");
testQuery.include("book"); // A Pointer<Book> field.
testQuery.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> bookListResults, ParseException e) {
if (e == null) {
for (ParseObject object : bookListResults) {
log("objectId: " + object.getObjectId()); // Works
log("userObjectId: " + object.getParseObject("user").getObjectId()); // Works
log("bookObjectId: " + object.getParseObject("book").getObjectId()); // null
ParseObject bookObject = object.getParseObject("book");
log("bookObjectId: " + bookObject.getObjectId()); // null
log("bookObjectId2: " + bookObject.getString("objectId")); // null
log("bookIsbn13: " + bookObject.getString("isbn13")); // Works
log("bookIsbn10: " + bookObject.getString("isbn10")); // Works
log("bookGoogleId: " + bookObject.getString("googleId")); // Works
}
} else {
CustomToast.showToast(getActivity(), e.getMessage());
}
}
});
parsequerytestquery=ParseQuery.getQuery(“Sell”);
testQuery.whereEqualTo(“user”,ParseUser.getCurrentUser());//指针字段。
testQuery.include(“用户”);
testQuery.include(“book”);//指针字段。
findInBackground(新的FindCallback(){
@凌驾
public void done(列出bookListResults,parsee异常){
如果(e==null){
for(ParseObject对象:bookListResults){
log(“objectId:+object.getObjectId());//有效
log(“userObjectId:+object.getParseObject(“user”).getObjectId());//有效
log(“bookObjectId:+object.getParseObject(“book”).getObjectId());//null
ParseObject bookObject=object.getParseObject(“book”);
日志(“bookObjectId:+bookObject.getObjectId());//null
log(“bookobjectd2:”+bookObject.getString(“objectId”);//null
log(“bookIsbn13:+bookObject.getString(“isbn13”);//有效
log(“bookIsbn10:+bookObject.getString(“isbn10”);//有效
log(“bookGoogleId:+bookObject.getString(“googleId”);//有效
}
}否则{
CustomToast.showToast(getActivity(),e.getMessage());
}
}
});
ps-objectId字段在分析数据浏览器中填写
ps-我正在为Android使用Parse-1.4.3
更新:
-在上面的代码中,Book
是扩展ParseObject的完整子类,使用ParseObject.registerSubclass(Book.class)
和@ParseClassName(“Book”)
当我删除registerSubclass()和注释时,objectId就工作了!这是一个可重复的错误
我还没有找到这背后的原因。任何进一步的洞察都会很有帮助。只有在您第一次创建OID时才有对OID的引用,并且返回的json具有该值 myObj.getObjectId()将返回null 请参阅“哪里有解决方法”中的同一主题的讨论 AFAIK android SDK没有解决方法 但是对于android,您可以使用android的RESTAPI来获取OID OID的Rest示例(请参见代码底部的“objectId”):
谢谢,但我相信objectId应该随着每个查询返回,就像我最初问题中3个ParseObject中的2个一样。我已经用更多的信息更新了这篇文章,以帮助使用Android SDK通过ParseQuery正确获取objectId。也许你的问题是异步滞后,正如本文中提到的。
GET -H "X-Parse-Application-Id: ovv" -H "X-Parse-REST-API-Key: eoj" -H "X-Parse-Session-Token: 9ds" -G --data-urlencode 'limit=2' https://api.parse.com/1/classes/MyCls
{
"results":[
{
"createdBy":{
"__type":"Pointer",
"className":"_User",
"objectId":"I2bhDkeA5L"
},
"media1":{},
"media2":{},
"media3":{},
"msg":"hi how are you ",
"createdAt":"2014-03-07T05:32:48.906Z",
"updatedAt":"2014-03-09T00:31:01.498Z",
"objectId":"XPdLazBUzV", ********
"ACL":{}
},