我是android的新手,它设计了一个应用程序,它将从json文件中读取问题和选项,并将在文本视图上设置文本,只有在单击正确的选项时才会显示下一个问题,但我不是能够弄清楚我应该怎么做。
{
"questions": [
{
"question": "Question....",
"opt1": "ravi@gmail.com",
"opt2": "country",
"opt3" : "male",
"opt4": "option 4",
"coropt": "b"
},
{
"question": "Question....",
"opt1": "johnny_depp@gmail.com",
"opt2": "country",
"opt3" : "male",
"opt4": "option 4",
"coropt": "a"
},
{
"question": "Question....",
"opt1": "leonardo_dicaprio@gmail.com",
"opt2": "country",
"opt3" : "male",
"opt4": "option 4",
"coropt": "d"
},
{
"question": "Question....",
"opt1": "john_wayne@gmail.com",
"opt2": "country",
"opt3" : "male",
"opt4": "option 4",
"coropt": "c"
}
]
}
here is the view in which json array data needs to be placed one by one
这是我正在处理的代码,但我不知道如何以及在何处解析json数据。
public class JavaQuiz extends AppCompatActivity {
TextView ltv, tv1, tv2, tv3, tv4;
// JSON Node names
private static final String TAG_QUESTIONS = "questions";
private static final String TAG_QUESTION = "question";
private static final String TAG_OPTION1 = "opt1";
private static final String TAG_OPTION2 = "opt2";
private static final String TAG_OPTION3 = "opt3";
private static final String TAG_OPTION4 = "opt4";
private static final String TAG_CORRECTOPTION = "coropt";
// contacts JSONArray
JSONArray questions = null;
// Hashmap for ListView
ArrayList<HashMap<String, String>> questionList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_java_quiz);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ltv = (TextView) findViewById(R.id.textView7);
tv1 = (TextView) findViewById(R.id.textView8);
tv2 = (TextView) findViewById(R.id.textView9);
tv3 = (TextView) findViewById(R.id.textView10);
tv4 = (TextView) findViewById(R.id.textView11);
}
class QuestionShow extends AsyncTask<String, Void, Void> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(JavaQuiz.this);
progressDialog.setTitle("Fetching");
progressDialog.setMessage("Setting question");
progressDialog.show();
}
@Override
protected Void doInBackground(String... params) {
HttpClient client = new DefaultHttpClient();
/* HttpPost post=new HttpPost("http://192.168.1.5/questions.json");
post.setEntity(new UrlEncodedFormEntity(params[0]));
HttpResponse response = client.execute(post);
*/
String jsonStr = "http://192.168.1.5/questions.json";
/* if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
questions = jsonObj.getJSONArray(TAG_QUESTIONS);
// looping through All questions
for (int i = 0; i < questions.length(); i++) {
JSONObject q = questions.getJSONObject(i);
String question = q.getString(TAG_QUESTION);
String op1 = q.getString(TAG_OPTION1);
String op2 = q.getString(TAG_OPTION2);
String op3 = q.getString(TAG_OPTION3);
String op4 = q.getString(TAG_OPTION4);
String coropt = q.getString(TAG_CORRECTOPTION);
/* // tmp hashmap for single question
HashMap<String, String> ques = new HashMap<String, String>();
// adding each child node to HashMap key => value
ques.put(TAG_QUESTION, question);
ques.put(TAG_OPTION1, op1);
ques.put(TAG_OPTION2, op2);
ques.put(TAG_OPTION3, op3);
ques.put(TAG_OPTION4, op4);
ques.put(TAG_CORRECTOPTION, coropt);
// adding contact to contact list
questionList.add(ques);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
*/
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
String jsonStr = "http://192.168.1.5/questions.json";
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
questions = jsonObj.getJSONArray(TAG_QUESTIONS);
// looping through All questions
for (int i = 0; i < questions.length(); ) {
JSONObject q = questions.getJSONObject(i);
String question = q.getString(TAG_QUESTION);
String op1 = q.getString(TAG_OPTION1);
String op2 = q.getString(TAG_OPTION2);
String op3 = q.getString(TAG_OPTION3);
String op4 = q.getString(TAG_OPTION4);
String coropt = q.getString(TAG_CORRECTOPTION);
ltv.setText(question);
tv1.setText(op1);
tv2.setText(op1);
tv3.setText(op1);
tv4.setText(op1);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
public void answer(View view)
{
String
if (view==tv1)
{
if(tv1.getText().toString()==)
}
}
}
答案 0 :(得分:0)
首先要运行AsyncTask,你需要从你的onCreate方法调用AsyncTask,如下所示
public class JavaQuiz extends AppCompatActivity {
TextView ltv, tv1, tv2, tv3, tv4;
// contacts JSONArray
JSONArray questions = null;
// Hashmap for ListView
ArrayList<HashMap<String, String>> questionList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_java_quiz);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ltv = (TextView) findViewById(R.id.textView7);
tv1 = (TextView) findViewById(R.id.textView8);
tv2 = (TextView) findViewById(R.id.textView9);
tv3 = (TextView) findViewById(R.id.textView10);
tv4 = (TextView) findViewById(R.id.textView11);
String jsondata = "{\n" +
"\"questions\": [\n" +
" {\n" +
" \"question\": \"Question....\",\n" +
" \"opt1\": \"ravi@gmail.com\",\n" +
" \"opt2\": \"country\",\n" +
" \"opt3\" : \"male\",\n" +
" \"opt4\": \"option 4\",\n" +
" \"coropt\": \"b\"\n" +
" },\n" +
" {\n" +
" \"question\": \"Question....\",\n" +
" \"opt1\": \"johnny_depp@gmail.com\",\n" +
" \"opt2\": \"country\",\n" +
" \"opt3\" : \"male\",\n" +
" \"opt4\": \"option 4\",\n" +
" \"coropt\": \"a\"\n" +
" },\n" +
" {\n" +
" \"question\": \"Question....\",\n" +
" \"opt1\": \"leonardo_dicaprio@gmail.com\",\n" +
" \"opt2\": \"country\",\n" +
" \"opt3\" : \"male\",\n" +
" \"opt4\": \"option 4\",\n" +
" \"coropt\": \"d\"\n" +
" },\n" +
" {\n" +
" \"question\": \"Question....\",\n" +
" \"opt1\": \"john_wayne@gmail.com\",\n" +
" \"opt2\": \"country\",\n" +
" \"opt3\" : \"male\",\n" +
" \"opt4\": \"option 4\",\n" +
" \"coropt\": \"c\"\n" +
" }\n" +
"]\n" +
"}";
new QuestionShow(JavaQuiz.this).execute(jsondata);
//If using URL use this below
// new QuestionShow(JavaQuiz.this).execute("http://192.168.1.5/questions.json");
}
public class QuestionShow extends AsyncTask<String, String, ArrayList<HashMap<String, String>>> {
ProgressDialog progressDialog;
Context context;
public QuestionShow(Context context) {
this.context = context;
}
// JSON Node names
public String TAG_QUESTIONS = "questions";
public String TAG_QUESTION = "question";
public String TAG_OPTION1 = "opt1";
public String TAG_OPTION2 = "opt2";
public String TAG_OPTION3 = "opt3";
public String TAG_OPTION4 = "opt4";
public String TAG_CORRECTOPTION = "coropt";
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(context);
progressDialog.setTitle("Fetching");
progressDialog.setMessage("Setting question");
progressDialog.show();
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(String... params) {
/*Your networking activities can be done here and the params[0] URL can be passed to it*/
// HttpClient client = new DefaultHttpClient();
// HttpPost post = new HttpPost("http://192.168.1.5/questions.json");
// try {
// post.setEntity(new UrlEncodedFormEntity(params[0]));
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// HttpResponse response = client.execute(post);
//
String jsonStr = params[0];
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
questions = jsonObj.getJSONArray(TAG_QUESTIONS);
questionList = new ArrayList<>();
// looping through All questions
for (int i = 0; i < questions.length(); i++) {
JSONObject q = questions.getJSONObject(i);
String question = q.getString(TAG_QUESTION);
String op1 = q.getString(TAG_OPTION1);
String op2 = q.getString(TAG_OPTION2);
String op3 = q.getString(TAG_OPTION3);
String op4 = q.getString(TAG_OPTION4);
String coropt = q.getString(TAG_CORRECTOPTION);
// tmp hashmap for single question
HashMap<String, String> ques = new HashMap<String, String>();
// adding each child node to HashMap key => value
ques.put(TAG_QUESTION, question);
ques.put(TAG_OPTION1, op1);
ques.put(TAG_OPTION2, op2);
ques.put(TAG_OPTION3, op3);
ques.put(TAG_OPTION4, op4);
ques.put(TAG_CORRECTOPTION, coropt);
// adding contact to contact list
questionList.add(ques);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
// }
return questionList;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> hashMapArrayList) {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
if (hashMapArrayList.size() > 0) {
ltv.setText(hashMapArrayList.get(2).get(TAG_QUESTION));
tv1.setText(hashMapArrayList.get(2).get(TAG_OPTION1));
tv2.setText(hashMapArrayList.get(2).get(TAG_OPTION2));
tv3.setText(hashMapArrayList.get(2).get(TAG_OPTION3));
tv4.setText(hashMapArrayList.get(2).get(TAG_OPTION4));
} else {
Toast.makeText(getApplicationContext(), "No data found", Toast.LENGTH_SHORT).show();
}
}
}
// public void answer(View view)
// {
// String
// if (view==tv1)
// {
// if(tv1.getText().toString()==)
// }
// }
}
由于您正在运行Web服务来获取数据,因此您需要在doInBackground()方法中调用AsyncTask中的Web服务。
然后你需要将收到的结果传递给onPostExecute()方法。
接收onPostExecute中的数据,然后在布局中设置文本。
我选择了第一个问题,只能迭代或选择要显示的首选问题,甚至可以更改要解析的json输出。