gpt4 book ai didi

java - 如何正确迭代 HashMap 元素的数组列表

转载 作者:行者123 更新时间:2023-12-01 12:01:31 24 4
gpt4 key购买 nike

我正在从 Assets 文件夹中读取本地 JSON 源。我的 json 数组中有两个对象。我已成功读取,然后将数据作为键/值对放入列表中。我已经迭代了列表并希望在 TextView 中显示数据。我的 Android Activity 代码如下

package com.aquib.quizapp;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;

public class QuizActivity extends Activity {

TextView questionName;
RadioButton option1, option2, option3, option4;
Button nextQuestion;
String questionValue, option1Value, option2Value, option3Value,
option4Value;
int questionNumber = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
questionName = (TextView) findViewById(R.id.qestionName);
option1 = (RadioButton) findViewById(R.id.option1);
option2 = (RadioButton) findViewById(R.id.option2);
option3 = (RadioButton) findViewById(R.id.option3);
option4 = (RadioButton) findViewById(R.id.option4);
nextQuestion = (Button) findViewById(R.id.next_question);

try {
readJSON();
} catch (JSONException e) {
e.printStackTrace();
}
setView(questionNumber, questionValue, option1Value, option2Value,
option3Value, option4Value);

if (questionNumber < 3) {
nextQuestion.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
setView(questionNumber, questionValue, option1Value,
option2Value, option3Value, option4Value);
}
});
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.quiz, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

public String loadJSONFromAsset() {
String data = null;
try {

InputStream is = getAssets().open("quiz.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
data = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return data;
}

public void readJSON() throws JSONException {

JSONObject object = new JSONObject(loadJSONFromAsset());
JSONArray jArray = object.getJSONArray("quiz");
List<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> m_li = null;

for (int i = 0; i < jArray.length(); i++) {

JSONObject data = jArray.getJSONObject(i);

int questionNumberValue = data.getInt("question_number");
String queNumber = String.valueOf(questionNumberValue);
String questionValue = data.getString("question");
String option1Value = data.getString("option1");
String option2Value = data.getString("option2");
String option3Value = data.getString("option3");
String option4Value = data.getString("option4");

Log.d("Details-->", questionValue);
Log.d("Question Number", queNumber);

// Add your values in your `ArrayList` as below:

m_li = new HashMap<String, String>();
m_li.put("question_number", queNumber);
m_li.put("question", questionValue);
m_li.put("option1", option1Value);
m_li.put("option2", option2Value);
m_li.put("option3", option3Value);
m_li.put("option4", option4Value);

formList.add(m_li);
}

Iterator<HashMap<String, String>> itr = formList.iterator();
while (itr.hasNext()) {
HashMap<String, String> map = (HashMap<String, String>) itr.next();
questionNumber = Integer.parseInt(map.get("question_number"));
questionValue = map.get("question");
option1Value = map.get("option1");
option2Value = map.get("option2");
option3Value = map.get("option3");
option4Value = map.get("option4");
Log.d("Question Number", String.valueOf(questionNumber));
Log.d("Question Name", questionValue);
Log.d("Option 1", option1Value);
Log.d("Option 2", option2Value);
Log.d("Option 3", option3Value);
Log.d("Option 4", option4Value);

}

}

private void setView(int questionNumber, String questionValue,
String option1Value, String option2Value, String option3Value,
String option4Value) {

questionName.setText("Q." + String.valueOf(questionNumber)
+ questionValue);
option1.setText(option1Value);
option2.setText(option2Value);
option3.setText(option3Value);
option4.setText(option4Value);
questionNumber++;
}
}

我的 json 文件是这样的

{
"quiz": [
{
"question_number" : 0,
"question": "What is capital of India?",
"option1": "New Delhi",
"option2": "Agra",
"option3": "Noida",
"option4": "Jaipur"
},

{
"question_number" : 1,
"question": "What is capital of Rajasthan?",
"option1": "Agra",
"option2": "New Delhi",
"option3": "Lucknow",
"option4": "Noida"
}
]
}

我在 Logcat 中得到了正确的结果。但我不知道为什么第二个 json 数据首先显示,甚至我的按钮也不起作用并且不显示其他数据。请帮忙。

最佳答案

你可以用这种方式将值放入 HashMap 中

for (int i = 0; i < jArray.length(); i++) {

JSONObject data = jArray.getJSONObject(i);

int questionNumberValue = data.getInt("question_number");
String queNumber = String.valueOf(questionNumberValue);
String questionValue = data.getString("question");
String option1Value = data.getString("option1");
String option2Value = data.getString("option2");
String option3Value = data.getString("option3");
String option4Value = data.getString("option4");

Log.d("Details-->", questionValue);
Log.d("Question Number", queNumber);

// Add your values in your `ArrayList` as below:

m_li = new HashMap<String, String>();
m_li.put("question_number"+i, queNumber);
m_li.put("question"+i, questionValue);
m_li.put("option1"+i, option1Value);
m_li.put("option2"+i, option2Value);
m_li.put("option3"+i, option3Value);
m_li.put("option4"+i, option4Value);

formList.add(m_li);
}

同样使用for循环你将从hashmap中获取值..

用于从 HashMap 中获取值..

      Iterator myVeryOwnIterator = meMap.keySet().iterator();  
while(myVeryOwnIterator.hasNext()) {
String key=(String)myVeryOwnIterator.next();
String value=(String)meMap.get(key);
Toast.makeText(ctx, "Key: "+key+" Value: "+value, Toast.LENGTH_LONG).show();
}

关于java - 如何正确迭代 HashMap 元素的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27957315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com