Android Parse.com-在for循环中同步findInBackground

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_-

我不知道如何界定问题的标题,但是,下面是我要做的

使用Parse.com

我有一个表,它有一个带有数组数据类型的列。我在本专栏中存储了一个JSONArray。JSONArray有3个JSONObject。我必须循环3个JSONObject,获得一个键为“type”的字段,并使用该键的值(例如“type_dob”),再次查询一个单独的表。我需要在一行中执行此操作,例如,一旦检索到第一个键的结果,那么我必须执行第二个键的查询

我怎样才能做到这一点

示例JSON:
问题:[{“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