2015-04-29 2 views
1

Я делаю тестовое приложение с Android. У меня есть json-файл, и я хочу прочитать его в классе активности. Вот json-файл. Написал код, но код не распознает переменную «вопрос», которую я описал вверху.(SOLVED) Android-Parsing Local JSON Data (папка с ресурсами)

{ 
 
    "questions": [ 
 
     { 
 
       "id": "a200", 
 
       "question": "lorem ipsum dolor _______ amet", 
 
       "optionA": "lorem", 
 
       "optionB": "ipsum", 
 
       "optionC" : "dolor", 
 
       "optionD": "sit" 
 
       "rightAnswer" : "sit" 
 
        
 
     }, 
 
     { 
 
       "id": "b200", 
 
       "question": "_____ ipsum dolor sit amet", 
 
       "optionA": "lorem", 
 
       "optionB": "ipsum", 
 
       "optionC" : "dolor", 
 
       "optionD": "sit" 
 
       "rightAnswer" : "lorem" 
 
        
 
     }, 
 
     { 
 
       "id": "c200", 
 
       "question": "lorem _____ dolor sit amet", 
 
       "optionA": "lorem", 
 
       "optionB": "ipsum", 
 
       "optionC" : "dolor", 
 
       "optionD": "sit" 
 
       "rightAnswer" : "ipsum"      
 
     }, 
 
    ] 
 
}

А вот OnCreate часть моего QuizActivityAdjectives.java файла.

public class QuizActivityAdjectives extends Activity { 
 

 
\t TextView txt_questionAdjective; 
 

 
\t @Override 
 
\t protected void onCreate(Bundle savedInstanceState) { 
 
\t \t super.onCreate(savedInstanceState); 
 
\t \t setContentView(R.layout.activity_quiz_adjectives); 
 
\t \t // Hangi xml dosyasının dikkate alınacağı belirlendi. 
 

 
\t \t // Reading json file from assets folder 
 
\t \t StringBuffer sb = new StringBuffer(); 
 
\t \t BufferedReader br = null; 
 
\t \t try { 
 
\t \t \t br = new BufferedReader(new InputStreamReader(getAssets().open(
 
\t \t \t \t \t "Questions.json"))); 
 
\t \t \t String temp; 
 
\t \t \t while ((temp = br.readLine()) != null) 
 
\t \t \t \t sb.append(temp); 
 
\t \t } catch (IOException e) { 
 
\t \t \t e.printStackTrace(); 
 
\t \t } finally { 
 
\t \t \t try { 
 
\t \t \t \t br.close(); // stop reading 
 
\t \t \t } catch (IOException e) { 
 
\t \t \t \t e.printStackTrace(); 
 
\t \t \t } 
 
\t \t } 
 

 
\t \t // Try to parse JSON 
 
\t \t try { 
 
\t \t \t // Creating JSONObject from String 
 
\t \t \t JSONObject jsonObjMain = new JSONObject(); 
 

 
\t \t \t // Creating JSONArray from JSONObject 
 
\t \t \t JSONArray jsonArray = jsonObjMain.getJSONArray("questions"); 
 

 
\t \t \t // JSONArray has four JSONObject 
 
\t \t \t for (int i = 0; i < jsonArray.length(); i++) { 
 

 
\t \t \t \t // Creating JSONObject from JSONArray 
 
\t \t \t \t JSONObject jsonObj = jsonArray.getJSONObject(i); 
 

 
\t \t \t \t // Getting data from individual JSONObject 
 
\t \t \t \t int id = jsonObj.getInt("id"); 
 
\t \t \t \t String question = jsonObj.getString("question"); 
 
\t \t \t \t String optionA = jsonObj.getString("optionA"); 
 
\t \t \t \t String optionB = jsonObj.getString("optionB"); 
 
\t \t \t \t String optionC = jsonObj.getString("optionC"); 
 
\t \t \t \t String optionD = jsonObj.getString("optionD"); 
 
\t \t \t \t String rightAnswer = jsonObj.getString("rightAnswer"); 
 

 
\t \t \t } 
 

 
\t \t } catch (JSONException e) { 
 
\t \t \t // TODO Auto-generated catch block 
 
\t \t \t e.printStackTrace(); 
 
\t \t } 
 

 
\t \t String myjsonstring = sb.toString(); 
 

 
\t \t txt_questionAdjective = (TextView) findViewById(R.id.txt_questionAdjective); 
 
\t \t txt_questionAdjective.setText(question); //THE CODE ERRORS HERE. CAN NOT RESOLVE QUESTION VARIABLE. 
 

 
\t }

Как я могу избавиться от этого вопроса? И этот код имеет смысл? Это будет работать ?

Ошибка: «вопрос не может быть решен к переменной» (Комментарий строки я написал в нижней части)

Спасибо заранее.

EDIT: решаемые Я бы никогда не ожидать, но после исправления файла JSON (там должен был быть запятая, которая i'ven't подмечено, я был должен изменить значение идентификатора, которые были описаны в междунар и приведены в файле JSON с гольца (как A200) После того, что проблема исчезла, и JSON было неправдоподобным Спасибо большое за ваше внимание

+0

Попробуйте создать 'JSONObject' с' String' вы читаете, вместо того, чтобы просто пометив его с комментарием: P – ceekay

+0

Не могу спросить Будет ли это работать? Проделайте некоторую работу и сообщите об ошибке, если это произойдет. – Harry

+0

Как я упоминал в сниппет в строке комментария .. Описание \t \t ресурсов Путь \t \t Расположение Тип вопрос не может быть решен к переменной \t \t QuizActivityAdjectives.java/YDSQuizApplication/SRC/орг/например/ydsquizapp \t линии 79 \t Проблема Java – nsarchar

ответ

3

Вы создаете новый JSONObject, вместо разбора файла:...

JSONObject jsonObjMain = new JSONObject(); 

должно быть:

JSONObject jsonObjMain = new JSONObject(sb.toString()); 

Edit:

Теперь я понял ваш вопрос.

Вы не вправе и переменная question больше не существует. Кроме того, есть несколько вопросов, как вы ожидаете установить его на свой TextView?

Вы можете сохранить вопросы в массив и использовать любой из них, как это:

List<String> questions = new ArrayList<>(); 

try { 
    ... 
    for (int i = 0; i < jsonArray.length(); i++) { 
     ... 
     questions.add(jsonObj.getString("question")); 
     ... 
    } 

} catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

String myjsonstring = sb.toString(); 

// Check if questions have been fetched 
if (questions.size() > 0) { 
    txt_questionAdjective = (TextView) findViewById(R.id.txt_questionAdjective); 
    // Use the first question 
    txt_questionAdjective.setText(questions.get(0)); 
} 
+0

Спасибо. Итак, какова черта, из-за которой я могу ошибаться, что вопрос не может быть разрешен переменной? – nsarchar

+0

@nsarchar опубликовать всю ошибку. – Simas

+0

Описание \t \t ресурсов Путь \t \t Расположение Тип вопрос не может быть решен к переменной \t \t QuizActivityAdjectives.java/YDSQuizApplication/SRC/орг/например/ydsquizapp \t линии 79 \t Java Проблема – nsarchar

Смежные вопросы