// 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。 如何在按钮点击时获得随机问题。帮我提供示例代码。我尝试了一些但没有效果。
答案 0 :(得分:1)
您可以将所有问题都放在列表中,然后访问此列表中的随机元素。
使用此thread中的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 );
}
}
});
以及此thread
中的随机方法/**
* 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;
}