Android Parse.com-在for循环中同步findInBackground
我不知道如何界定问题的标题,但是,下面是我要做的 使用Parse.com 我有一个表,它有一个带有数组数据类型的列。我在本专栏中存储了一个JSONArray。JSONArray有3个JSONObject。我必须循环3个JSONObject,获得一个键为“type”的字段,并使用该键的值(例如“type_dob”),再次查询一个单独的表。我需要在一行中执行此操作,例如,一旦检索到第一个键的结果,那么我必须执行第二个键的查询 我怎样才能做到这一点 示例JSON:Android Parse.com-在for循环中同步findInBackground,android,json,parse-platform,Android,Json,Parse Platform,我不知道如何界定问题的标题,但是,下面是我要做的 使用Parse.com 我有一个表,它有一个带有数组数据类型的列。我在本专栏中存储了一个JSONArray。JSONArray有3个JSONObject。我必须循环3个JSONObject,获得一个键为“type”的字段,并使用该键的值(例如“type_dob”),再次查询一个单独的表。我需要在一行中执行此操作,例如,一旦检索到第一个键的结果,那么我必须执行第二个键的查询 我怎样才能做到这一点 示例JSON:问题:[{“type”:“type_-
问题:[{“type”:“type_-dob”,“id”:“I27y16N5gX”},{“type”:“type_-text”,“id”:“jgaujtnzc”},{“type”:“type_-radio”,“id”:“cCDlrrJYKI”}]
我现在的代码是:
public void getDataFromServer() {
ParseUser user = ParseUser.getCurrentUser();
if (user != null) {
showProgressDialog("Getting Survey details...");
int survey_count = user.getInt(Const.Parse_User.SURVEY_COUNT);
Log.d(Const.DEBUG, "Survey Count: " + survey_count);
String current_survey = "survey_" + (survey_count + 1);
Log.d(Const.DEBUG, "Current Survey: " + current_survey);
ParseQuery<ParseObject> query = ParseQuery.getQuery("Surveys");
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID, current_survey);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
dismissProgressDialog();
if (e != null) {
Log.d(Const.DEBUG, "Exception while getting data from Parse - Surveys table");
} else {
if (list.size() > 0) {
ParseObject object = list.get(0);
try {
String questions_array = object.getJSONArray(Const.Parse_SURVEYS.QUESTIONS).toString();
Log.d(Const.DEBUG, "Questions: " + questions_array);
JSONArray array = object.getJSONArray(Const.Parse_SURVEYS.QUESTIONS);
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
String type = jsonObject.get("type").toString();
//I should write the query for getting data from table matching the String type. //If i do a findInBackground query for each of the key, then its done in a background thread
//and the for loop exists even before the result for first key comes back.
//How can i handle this?
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
});
}
}
public void getDataFromServer(){
ParseUser=ParseUser.getCurrentUser();
如果(用户!=null){
showProgressDialog(“获取调查详细信息…”);
int survey\u count=user.getInt(Const.Parse\u user.survey\u count);
Log.d(Const.DEBUG,“测量计数:”+测量计数);
字符串current\u survey=“survey\u”+(survey\u count+1);
Log.d(Const.DEBUG,“当前调查:”+当前调查);
ParseQuery=ParseQuery.getQuery(“调查”);
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID,当前_SURVEY);
findInBackground(新的FindCallback(){
@凌驾
公共作废完成(列表,异常解析){
dismissProgressDialog();
如果(e!=null){
d(Const.DEBUG,“从Parse-Surveys表获取数据时发生异常”);
}否则{
如果(list.size()>0){
ParseObject=list.get(0);
试一试{
String questions_array=object.getJSONArray(Const.Parse_SURVEYS.questions).toString();
Log.d(Const.DEBUG,“问题:+问题\u数组);
JSONArray数组=object.getJSONArray(Const.Parse\u SURVEYS.QUESTIONS);
对于(int i=0;i
如果您还需要什么,请告诉我?我认为您的db设计正朝着一个不幸的方向发展 据我所知,从您的问题来看,更好的方法是存储指针数组。例如,Parse.com中有一个名为“Question”的数据类,它存储一个类型和您需要的任何其他属性 现在假设在“调查”类中有一个数组。然后您的代码变得相当简单:
ParseQuery<ParseObject> query = ParseQuery.getQuery("Surveys");
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID, current_survey);
query.include(Const.Parse_SURVEYS.QUESTIONS); // <- IMPORTANT
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
ParseObject object = list.get(0);
// get all Question objects
List<ParseObject> array = object.getList(Const.Parse_SURVEYS.QUESTIONS);
// no need to fetch, the data is here
for (ParseObject question: array) {
String type = question.getString("type");
String question = question.getString("question");
List<String> answerOptions = question.getList("options")
...
}
}
}
ParseQuery query=ParseQuery.getQuery(“调查”);
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID,当前_SURVEY);
query.include(Const.Parse_SURVEYS.QUESTIONS);// 我认为您的db设计朝着一个不幸的方向发展
据我所知,从您的问题来看,更好的方法是存储指针数组。例如,Parse.com中有一个名为“Question”的数据类,它存储一个类型和您需要的任何其他属性
现在假设在“调查”类中有一个数组。然后您的代码变得相当简单:
ParseQuery<ParseObject> query = ParseQuery.getQuery("Surveys");
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID, current_survey);
query.include(Const.Parse_SURVEYS.QUESTIONS); // <- IMPORTANT
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
ParseObject object = list.get(0);
// get all Question objects
List<ParseObject> array = object.getList(Const.Parse_SURVEYS.QUESTIONS);
// no need to fetch, the data is here
for (ParseObject question: array) {
String type = question.getString("type");
String question = question.getString("question");
List<String> answerOptions = question.getList("options")
...
}
}
}
ParseQuery query=ParseQuery.getQuery(“调查”);
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID,当前_SURVEY);
query.include(Const.Parse_SURVEYS.QUESTIONS);// 我以这种方式从数据解析表中获取数据
ParseQuery<ParseObject> query = ParseQuery.getQuery("Surveys");
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID, current_survey);
query.include(Const.Parse_SURVEYS.QUESTIONS); // <- IMPORTANT
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
ParseObject object = list.get(0);
// first initilization Jsonobject Array list.
List<JSONObject> jsobj = new ArrayList<JSONObject>();
jsobj = object.getList(Const.Parse_SURVEYS.QUESTIONS);
// no need to fetch, the data is here
for (int i = 0; i < jsobj.size(); i++) {
Log.e("in the For loop ", ": : ::111111 : " + jsobj.get(i));
JSONObject arr1 = new JSONObject((Map) jsobj.get(i)); // jsobj.get(i);
Log.e("in the For loop ", ": : ::111111 : " + arr1);
try {
Log.e("in the For loop ",
": : ::111111 : " + arr1.getString("name"));
// hear u want to store data in Custom Array list.
// other wise u store in single String value
String type = arr1.getString("type");
String question = arr1.getString("question");
String options = arr1.getString("options");
// this is my custom getter setter class
GetIngredients ai = new GetIngredients();
ai.setName(arr1.getString("type"));
ai.setQty(arr1.getString("question"));
ai.setUnit(arr1.getString("options")) ;
// this is my custom array
arr_Ingredients.add(ai);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("in the For loop ", ": : :: : " + jsobj.get(i));
}
}
ParseQuery query=ParseQuery.getQuery(“调查”);
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID,当前_SURVEY);
query.include(Const.Parse_SURVEYS.QUESTIONS);// 我以这种方式从数据解析表中获取数据
ParseQuery<ParseObject> query = ParseQuery.getQuery("Surveys");
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID, current_survey);
query.include(Const.Parse_SURVEYS.QUESTIONS); // <- IMPORTANT
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
ParseObject object = list.get(0);
// first initilization Jsonobject Array list.
List<JSONObject> jsobj = new ArrayList<JSONObject>();
jsobj = object.getList(Const.Parse_SURVEYS.QUESTIONS);
// no need to fetch, the data is here
for (int i = 0; i < jsobj.size(); i++) {
Log.e("in the For loop ", ": : ::111111 : " + jsobj.get(i));
JSONObject arr1 = new JSONObject((Map) jsobj.get(i)); // jsobj.get(i);
Log.e("in the For loop ", ": : ::111111 : " + arr1);
try {
Log.e("in the For loop ",
": : ::111111 : " + arr1.getString("name"));
// hear u want to store data in Custom Array list.
// other wise u store in single String value
String type = arr1.getString("type");
String question = arr1.getString("question");
String options = arr1.getString("options");
// this is my custom getter setter class
GetIngredients ai = new GetIngredients();
ai.setName(arr1.getString("type"));
ai.setQty(arr1.getString("question"));
ai.setUnit(arr1.getString("options")) ;
// this is my custom array
arr_Ingredients.add(ai);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("in the For loop ", ": : :: : " + jsobj.get(i));
}
}
ParseQuery query=ParseQuery.getQuery(“调查”);
query.whereEqualTo(Const.Parse_SURVEYS.SURVEY_ID,当前_SURVEY);
query.include(Const.Parse_SURVEYS.QUESTIONS);//你刚才是不是从我的答案中复制了代码,并在一个显然是关于调查的代码中添加了一个名为getComponents
的子类?!WTF?!:你是不是从我的答案中复制了代码,并在一个显然是关于调查的代码中添加了一个名为getComponents
的子类?!WTF?!:D