如何从json响应中获得随机问题按钮单击事件



//json响应和解析代码

private void ListQuestion() {
        try {
            if (FriendZoneSelectFriendsWith.choose_gender.equals("Boy")) {
                NAME_JSON = "boysquestion.json";
            } else {
                NAME_JSON = "girlsquestion.json";
            }
            BufferedReader jsonReader = new BufferedReader(new InputStreamReader(getAssets().open(NAME_JSON)));
            StringBuilder jsonBuilder = new StringBuilder();
            for (String line = null; (line = jsonReader.readLine()) != null; ) {
                jsonBuilder.append(line).append("n");
            }
            // Parse Json
            JSONTokener tokener = new JSONTokener(jsonBuilder.toString());
            JSONArray jsonArray = new JSONArray(tokener);
            Log.e("JSON LENGTH-->", jsonArray.length() + "");
            final Integer[] arr = new Integer[jsonArray.length()];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = i;
            }
            Collections.shuffle(Arrays.asList(arr));
            Log.e("RANDOM", Arrays.asList(arr) + "");
            for (int i = 1; i < jsonArray.length(); i++) {
                jo_inside = jsonArray.getJSONObject(i);
                question = jo_inside.getString("question");
                for (int j = 1; j <= 25; j++) {
                    if (i == Arrays.asList(arr).get(j)) {
                        Log.e("Details-->", jo_inside.getString("question"));
                        question1 = jo_inside.getString("question");
                        tvQuestionText.setText(question1);
                        //Change question on click
                        imUp.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                for (int k = 1; k <= 25; k++) {
                                    if (k == Arrays.asList(arr).get(k)) {
                                        Log.d("textview", tvQuestionText.getText().toString());
                                        tvQuestionText.setText(question1);
                                    }
                                }
                            }
                        });
                        //    Log*/.d("Textview", tvQuestionText.getText().toString());
                    }

                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
    }

//Json响应-

Details-->﹕ Does he message you asking for advice?
10-21 02:52:40.157    7878-7878/? E/Details-->﹕ Has he ever sent you multiple messages in a row?
10-21 02:52:40.157    7878-7878/? E/Details-->﹕ Has he rang you crying over a girl?
10-21 02:52:40.157    7878-7878/? E/Details-->﹕ When you see him, do his text habits for others match what he is doing with you?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Are you waiting days for a response to a text message?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Does he send you message telling you he is thinking about you or similar?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Does he comment on your Facebook but not write back to your text messages?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Does he use social media to contact you rather than phone?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Has he ever has a photo with you as his profile picture?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Has his friends started randomly adding you on Facebook or followed you on Instagram/Twitter?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Does he ask you to hold his stuff regularly?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Has he burped in front of you?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Has he farted in front of you?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Does he listen when you speak?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Do you leave your friends to go and hang out with him and his friends?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Have you been on multiple dates with her?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Did he get dressed up for the date?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Did you talk about deep things on the date?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Did you insist on paying, only for him not to let you?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Did you he drop you home?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ When you dropped her home, did he linger in the car for a long time?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Did he take a photo and post it online while you were on your date?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Do his friends talk to you?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Have you ever sent him a thoughtful gift/message and he has not said thank you/responded?
10-21 02:52:40.168    7878-7878/? E/Details-->﹕ Has he ever asked you to cook for him?

我想得到随机问题,然后将其设置为textview按钮点击后。我怎么能得到随机问题上的按钮点击。帮助我与样例代码。

你可以把你所有的问题放在一个列表中,他们可以访问这个列表中的一个随机元素。

使用randInt(int min, int max)从这个线程得到一个随机数之间的范围,你可以做(未测试)

List<String> questions = new ArrayList<>();
//Add elements to the list of questions
//questions.add(...);
//questions.add(...);
if(!questions.isEmpty())
    String randomQuestion = questions.get(randInt(0,questions.size());

编辑每次你点击按钮,你需要从你的列表中随机得到一个问题。

所以使用你的代码,你必须做一些像(未测试)

//Initialize list of questions
List<String> questions = new ArrayList<>();
for (int i = 1; i < jsonArray.length(); i++) {
    jo_inside = jsonArray.getJSONObject(i);
    question = jo_inside.getString("question");
    questions.add(question);
}
//On click get another random question from list
imUp.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(!questions.isEmpty()) {
            String randomQuestion = questions.get(randInt(0,questions.size());
            tvQuestionText.setText(randomQuestion );
        }
    }
});

和这个线程的随机方法

/**
 * Returns a pseudo-random number between min and max, inclusive.
 * The difference between min and max can be at most
 * <code>Integer.MAX_VALUE - 1</code>.
 *
 * @param min Minimum value
 * @param max Maximum value.  Must be greater than min.
 * @return Integer between min and max, inclusive.
 * @see java.util.Random#nextInt(int)
 */
public static int randInt(int min, int max) {
    // NOTE: This will (intentionally) not run as written so that folks
    // copy-pasting have to think about how to initialize their
    // Random instance.  Initialization of the Random instance is outside
    // the main scope of the question, but some decent options are to have
    // a field that is initialized once and then re-used as needed or to
    // use ThreadLocalRandom (if using at least Java 1.7).
    Random rand;
    // nextInt is normally exclusive of the top value,
    // so add 1 to make it inclusive
    int randomNum = rand.nextInt((max - min) + 1) + min;
    return randomNum;
}

最新更新