- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从 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/
我有不同的结构,它们都包含一个 HashMap与 String作为键,但具有不同的值类型。例如,一个结构有一个类型为 HashMap 的成员, 另一个将有一个 HashMap 类型的成员, 等等。 我
我想制作一个包含学生姓名和科目的板,每个学生在每个科目中都有一个成绩(或者没有..他可以离开考试而不写,然后他的案子将是空的)。我只想使用 HashMap。我的意思是,它会是这样的: HashMap>
是否有内存和速度高效的方法来在 HashMap 中动态存储唯一键:值对? key 保证是唯一的,但它们的数量经常变化。插入和删除必须很快。 我所做的是包含有符号距离场的八叉树(非线性/完整)。八叉树经
有谁知道为什么选择通过 LinkedList 而不是另一个 Hashmap 来实现 HashMap 的存储桶。如果桶本身变成了 HashMap,那么 contains 或 get 的时间复杂度似乎是
我想创建一个具有嵌套结构的 HashMap,就像这个复杂的示例: { type: boy name: Phineas father: type: man
这个问题在这里已经有了答案: How do I create a global, mutable singleton? (7 个答案) 关闭 7 年前。 我想要一个可扩展的字典,将 Object 与
HashMap> hm = new HashMap>(); hm.put("Title1","Key1"); for(int i=0;i hm1 = new H
我必须修改当前代码以适应 Spring MVC。我有 HashMap hashmap = new HashMap(); request.setAttribute("dslrErrors", hashm
我正在尝试进行一些错误捕获。 错误应该检查数组的长度是否小于 2,并检查 HashMap 是否包含用户输入的键。 捕获的错误必须仅使用 if 语句,并且必须使用 .length() 方法,并且必须使用
在 stackoverflow 上提出另一个问题后,(Java- Why this program not throwing concurrent Modification exception)我开始
我有两个类,想使用 org.dozer.Mapper( http://dozer.sourceforge.net/ ) 将 Female 对象的属性映射到 Male 对象。 第一类是: public
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
是否有任何方法可以检查 HashMap 是否包含一组特定的键(这些键是在数组中给出的)。当我尝试类似下面的代码时,它返回 false。 map.containsKey(arrayOf("2018-01
跟进我的问题:How To Access hash maps key when the key is an object 我想尝试这样的事情:webSearchHash.put(xfile.getPa
我有一个可扩展的 ListView ,对于每个 child ,我需要有 4 个“额外”或字符串或其他名称来调用它:- 子标题- 描述- 链接1- 链接2 跟着教程,创建 ListView 、不同的 p
我想确保这是正确的,因为如果不正确,它可能会破坏我的应用程序。 我有这个: private static HashMap> balance = new HashMap<>(); 如果我得到这样的值:
我想做以下事情: 为某个键查找Vec,并将其存储以备后用。 如果它不存在,则为键创建一个空的 Vec,但仍将其保存在变量中。 如何有效地做到这一点?自然地,我认为我可以使用 match: use st
我想做以下事情: 为某个键查找Vec,并将其存储以备后用。 如果它不存在,则为键创建一个空的 Vec,但仍将其保存在变量中。 如何有效地做到这一点?自然地,我认为我可以使用 match: use st
我想做以下事情: 为某个键查找Vec,并将其存储以备后用。 如果它不存在,则为键创建一个空的 Vec,但仍将其保存在变量中。 如何有效地做到这一点?自然地,我认为我可以使用 match: use st
我想做以下事情: 为某个键查找Vec,并将其存储以备后用。 如果它不存在,则为键创建一个空的 Vec,但仍将其保存在变量中。 如何有效地做到这一点?自然地,我认为我可以使用 match: use st
我是一名优秀的程序员,十分优秀!