Parse.com 如何 return 来自 Android 中查询的值
Parse.com How to return a value from a query in Android
我正在使用 Parse API
查询 Android 应用程序的一些数据,我想知道如何 return 一个值(例如 Boolean
) 来自 Parse Query
。例如,我想要一个函数 returns true
如果存在一些数据, false
否则像这样:
public Boolean myFunction(){
ParseQuery<ParseObject> query = ParseQuery.getQuery();
query.findInBackground("someData",new GetCallback<ParseObject>() {
@Override
public void done(ParseObject lan, ParseException e) {
if(e==null){
return true;
} else {
return false;
}
});
}
我知道不能以这种方式完成,因为查询是在后台线程中处理的,我对 Callbacks
不是很熟悉。
我知道这里有一个类似的问题 Parse.com how to get return value of query 但这是针对 JavaScript
的。
你知道怎么做吗?
你快到了。当您获得解析对象时,使用以下命令将其解压缩:
boolean myBoolean = myParseObject.getBoolean("myBooleanColumn");
完整示例(通过id查找对象,可适用于其他类型的查询):
ParseQuery<ParseObject> query = ParseQuery.getQuery("YourClass");
query.getInBackground("id", new GetCallback<ParseObject>() {
public void done(ParseObject myParseObject, ParseException e) {
if (e == null) {
boolean myBoolean = myParseObject.getBoolean("myBooleanColumn");
} else {
// something went wrong
}
}
});
更新:如果您只想检查某行中是否存在某些数据,您可以使用
query.whereEqualTo("columnToFind", "searchterm");
您甚至可以找到将数组与行中的数据进行比较
query.whereContainsAll("columnToFind", arrayOfThingsToSearch);
经过一些研究并感谢@buckettt,最简单的方法是使用 Parse Cloud Code
。在 parse-server
文件夹内的 main.js
文件中定义函数:
Parse.Cloud.define("myFunction",function(req,res){
var userId = req.params.userId; //params passed in Client code
var myQuery = new Parse.Query(Parse.User);
myQuery.equalTo("userId", userId);
myQuery.find({
success: function(results) {
res.success(results.get("userName"));
}
error: function() {
res.error("Failed !");
}
}
});
并且在您的客户代码中:
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("userId",userId);
ParseCloud.callFunctionInBackground("myFunction", params, new FunctionCallback<String>() {
public void done(String res,ParseException e){
if (e == null) {
Log.i("Results :",res);
} else {
Log.i("Error",e.getMessage());
}
}
});
这样您 return 所需的值和功能将直接在您的服务器上执行。希望这有帮助
我正在使用 Parse API
查询 Android 应用程序的一些数据,我想知道如何 return 一个值(例如 Boolean
) 来自 Parse Query
。例如,我想要一个函数 returns true
如果存在一些数据, false
否则像这样:
public Boolean myFunction(){
ParseQuery<ParseObject> query = ParseQuery.getQuery();
query.findInBackground("someData",new GetCallback<ParseObject>() {
@Override
public void done(ParseObject lan, ParseException e) {
if(e==null){
return true;
} else {
return false;
}
});
}
我知道不能以这种方式完成,因为查询是在后台线程中处理的,我对 Callbacks
不是很熟悉。
我知道这里有一个类似的问题 Parse.com how to get return value of query 但这是针对 JavaScript
的。
你知道怎么做吗?
你快到了。当您获得解析对象时,使用以下命令将其解压缩:
boolean myBoolean = myParseObject.getBoolean("myBooleanColumn");
完整示例(通过id查找对象,可适用于其他类型的查询):
ParseQuery<ParseObject> query = ParseQuery.getQuery("YourClass");
query.getInBackground("id", new GetCallback<ParseObject>() {
public void done(ParseObject myParseObject, ParseException e) {
if (e == null) {
boolean myBoolean = myParseObject.getBoolean("myBooleanColumn");
} else {
// something went wrong
}
}
});
更新:如果您只想检查某行中是否存在某些数据,您可以使用
query.whereEqualTo("columnToFind", "searchterm");
您甚至可以找到将数组与行中的数据进行比较
query.whereContainsAll("columnToFind", arrayOfThingsToSearch);
经过一些研究并感谢@buckettt,最简单的方法是使用 Parse Cloud Code
。在 parse-server
文件夹内的 main.js
文件中定义函数:
Parse.Cloud.define("myFunction",function(req,res){
var userId = req.params.userId; //params passed in Client code
var myQuery = new Parse.Query(Parse.User);
myQuery.equalTo("userId", userId);
myQuery.find({
success: function(results) {
res.success(results.get("userName"));
}
error: function() {
res.error("Failed !");
}
}
});
并且在您的客户代码中:
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("userId",userId);
ParseCloud.callFunctionInBackground("myFunction", params, new FunctionCallback<String>() {
public void done(String res,ParseException e){
if (e == null) {
Log.i("Results :",res);
} else {
Log.i("Error",e.getMessage());
}
}
});
这样您 return 所需的值和功能将直接在您的服务器上执行。希望这有帮助