【问题标题】:After Getting object/array from json, how can i shuffle it (Randomize)从 json 获取对象/数组后,我该如何洗牌(随机化)
【发布时间】:2015-12-31 09:11:18
【问题描述】:

我用这个得到了 json 数据

``

private void loadQuestions() throws Exception {
        try {
        InputStream questions = this.getBaseContext().getResources()
                .openRawResource(R.raw.questions);
        bReader = new BufferedReader(new InputStreamReader(questions));
        StringBuilder quesString = new StringBuilder();
        String aJsonLine = null;
        while ((aJsonLine = bReader.readLine()) != null) {
            quesString.append(aJsonLine);
        }
        Log.d(this.getClass().toString(), quesString.toString());
        JSONObject quesObj = new JSONObject(quesString.toString());
        quesList = quesObj.getJSONArray("Questions");
        Log.d(this.getClass().getName(),
                "Num Questions " + quesList.length());
        } catch (Exception e){

        } finally {
            try {
                bReader.close();
            } catch (Exception e) {
                Log.e("", e.getMessage().toString(), e.getCause());
            }
        }
    }

    public static JSONArray getQuesList() {

        return quesList;
    }

``

这里是json数据。

``

{
  "Questions": [
    {
      "Question": "Which animal is Carnivorous?",
      "CorrectAnswer": 1,
      "Answers": [
        {
          "Answer": "Cow"
        },
        {
          "Answer": "Lion"
        },
        {
          "Answer": "Goat"
        },
        {
          "Answer": "Elephant"
        }
      ]
    },
    {
      "Question": "Humans need",
      "CorrectAnswer": 0,
      "Answers": [
        {
          "Answer": "Oxygen"
        },
        {
          "Answer": "Nitrogen"
        },
        {
          "Answer": "CarbonDioxide"
        },
        {
          "Answer": "Hydrogen"
        }
      ]
    },
        {
      "Question": "Choose the Amphibian ",
      "CorrectAnswer": 0,
      "Answers": [
        {
          "Answer": "Frog"
        },
        {
          "Answer": "Owl"
        },
        {
          "Answer": "Goat"
        },
        {
          "Answer": "Fox"
        }
      ]
    },
         {
      "Question": "---- is part of Earth`s Atmosphere.",
      "CorrectAnswer": 1,
      "Answers": [
        {
          "Answer": "Unisphere"
        },
        {
          "Answer": "Troposphere"
        },
        {
          "Answer": "Oxysphere"
        },
        {
          "Answer": "Carbosphere"
        }
      ]
    },
    ]
}

得到json数据后 我现在需要的只是随机化它。 请帮助兄弟,我已经尝试了一切但没有任何工作 提前致谢

【问题讨论】:

  • 你能修正一下格式吗?
  • @AndrewT。谢谢重新格式化

标签: android json random


【解决方案1】:

将值放入列表中,然后您可以轻松地对其进行随机播放。使用这个:

    ArrayList<String> listdata = new ArrayList<String>();     
    JSONArray jArray = (JSONArray)jsonObject; 
        if (jArray != null) { 
          for (int i=0;i<jArray.length();i++){ 
             listdata.add(jArray.get(i).toString());
          } 
    }
    Collections.shuffle(listdata);

【讨论】:

  • 对不起,我是 Java 新手,所以我真的不明白你想让我做什么。
【解决方案2】:

之后 quesList = quesObj.getJSONArray("Questions"); // Right place to shuffle PeterOla,将此添加到随机问题列表中:

    List<JSONObject> questionsList = new ArrayList<JSONObject>(quesList.length());
    for(int i=0,size=quesList.length();i<size;++i){
        try {
            questionsList.add(quesList.getJSONObject(i));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    long seed = System.nanoTime();
    Collections.shuffle(questionsList, new Random(seed));

【讨论】:

  • 感谢 firesun,我添加了代码但仍然无法正常工作。请有任何建议
  • 添加此代码后,questionsList 已随机化 jsonobject,不再是 quesList
  • 好的。所以我添加了`return questionsList; `` 到 getQuesList() 方法。但是应用程序崩溃了。我知道做错了。请告诉我哪里做错了。
  • 我看到了你的代码,并且已经运行了它,不存在崩溃。如果你想打乱你的问题,我建议你声明一个名为questionsList List&lt;JSONObject&gt;变量,删除全局quesList,像这样:static List&lt;JSONObject&gt; questionList; public static List&lt;JSONObject&gt; getQuesList() { return questionList; }然后修改你对getQuesList()的用法。
  • QuizFunActivity.getQuesList().length() 替换为QuizFunActivity.getQuesList().size(),将QuizFunActivity.getQuesList().getJSONObject(qIndex); 替换为QuizFunActivity.getQuesList().get(qIndex); 并删除try,catch 包装此语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多