2016-03-26 3 views
-1

Здравствуйте, я столкнулся с проблемой здесь. У меня есть JSON String и я анализировать данные, как это:Странные символы в Arraylist

@Override 
     protected List<QuestionsList> doInBackground(String... params) { 
      nameValuePairs = new ArrayList<>(); 
      try { 
       url = new URL(params[0]); 
       httpURLConnection = (HttpURLConnection) url.openConnection(); 
       httpURLConnection.setReadTimeout(10000); 
       httpURLConnection.setConnectTimeout(15000); 
       httpURLConnection.setRequestMethod("POST"); 
       httpURLConnection.setDoInput(true); 
       httpURLConnection.setDoOutput(true); 
       setupDataToDB(); 
       outputStream = httpURLConnection.getOutputStream(); 
       bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)); 
       bufferedWriter.write(StringGenerator.queryResults(nameValuePairs)); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 
       httpURLConnection.connect(); 
       inputStream = new BufferedInputStream(httpURLConnection.getInputStream()); 
       jsonResult = StringGenerator.inputStreamToString(inputStream, QuestionsActivity.this); 
       jsonResponse = new JSONObject(jsonResult.toString()); 
       Log.e("Response: ", jsonResult.toString()); 
       checkDisplayLanguage(langText); 
       questionsLists = new ArrayList<>(); 

       for (int i = 0; i < jsonMainNode.length(); i++) { 
        jsonChildNode = jsonMainNode.getJSONObject(i); 
        questionName = jsonChildNode.optString(Constants.QUESTION_NAME_JSON_NAME); 
        Log.e("Question Name: ", questionName); 
        jsonArray = jsonChildNode.optJSONArray(Constants.QUESTIONS_ANSWERS_ARRAY); 
        question_answers = new ArrayList<>(); 
        question_iscorrect = new ArrayList<>(); 
        for (int j = 0; j < jsonArray.length(); j++) { 
         jsonSecondChildNode = jsonArray.getJSONObject(j); 
         answer1 = jsonSecondChildNode.optString("answer1"); 
         Log.e("Answer1", answer1); 
         answer2 = jsonSecondChildNode.optString("answer2"); 
         Log.e("Answer2", answer2); 
         answer3 = jsonSecondChildNode.optString("answer3"); 
         Log.e("Answer3", answer3); 
         iscorrect1 = jsonSecondChildNode.optString("iscorrect1"); 
         iscorrect2 = jsonSecondChildNode.optString("iscorrect2"); 
         iscorrect3 = jsonSecondChildNode.optString("iscorrect3"); 
         question_answers.add(answer1); 
         question_answers.add(answer2); 
         question_answers.add(answer3); 

         question_iscorrect.add(iscorrect1); 
         question_iscorrect.add(iscorrect2); 
         question_iscorrect.add(iscorrect3); 

         Log.e("Answers in for loop", question_answers.toString()); 
         questionsLists.add(new QuestionsList(questionName, question_answers, question_iscorrect)); 
        } 

       } 
      } catch (IOException | JSONException e) { 
       e.printStackTrace(); 
      } 
      return questionsLists; 
     } 

и они выход, как это:

E/Question Name:: Where to look to find journal articles 
E/Answers in for loop: [In the librarys catalog , , ] 
E/Answers in for loop: [In the librarys catalog , , , , In alphabetical list of healink , ] 
E/Answers in for loop: [In the librarys catalog , , , , In alphabetical list of healink , , , , Databases available in the library's site] 
E/Question Name:: What information we provide magazine 
E/Answers in for loop: [Published research experiments current information, , ] 
E/Answers in for loop: [Published research experiments current information, , , , Lists information about people, addresses, organizations, ] 
E/Answers in for loop: [Published research experiments current information, , , , Lists information about people, addresses, organizations, , , , Legislation, competitions] 
E/Question Name:: What is the Issn (International Standard Serial Number) 
E/Answers in for loop: [Is the number used for the registration of periodical publications, , ] 
E/Answers in for loop: [Is the number used for the registration of periodical publications, , , , Is the International Unique number used for registration of printed books, ] 
E/Answers in for loop: [Is the number used for the registration of periodical publications, , , , Is the International Unique number used for registration of printed books, , , , Is the International Unique number used for the recording of Publications mixed forms] 

я хочу, чтобы отображаться как это:

E/Answers in for loop: [Is the number used for the registration of periodical publications, Is the International Unique number used for registration of printed books, Is the International Unique number used for the recording of Publications mixed forms] 

Как это возможно ?

+0

Вы не чисты. –

ответ

2

Вы разборе данные в неправильном направлении, то второй цикл является redundunt, и это также является причиной ваших данных отображается неправильно.

В основном на каждой итерации вы берете ответ на i-ом месте, так как нет данных для второго и третьего места на первой итерации 1-го и 2-го места на массиве (следовательно, второе и третье с тех пор, как массив на нулевом уровне) пустые в первый раз, на второй итерации 3-й и 4-й (следовательно, четвертый и пятый) пустые и только 6-й имеют данные и т. д.

В случае, если вы всегда будете получать 3 ответа вы можете удалить цикл for и просто адресовать 0, 1, 2 местоположения в массиве, чтобы получить ответы. Это сделает работу.
В случае, если вы хотите быть более универсальным способом переключить его на код ниже -

for (int j = 0; j < jsonArray.length(); j++) { 
      jsonSecondChildNode = jsonArray.getJSONObject(j); 
      answer = jsonSecondChildNode.optString("answer" + (j+1)); 
      Log.e("Answer", answer); 
      iscorrect = jsonSecondChildNode.optString("iscorrect" + (j+1)); 
      question_answers.add(answer); 
      question_iscorrect.add(iscorrect); 

      Log.e("Answers in for loop", question_answers.toString()); 
     } 

Кроме того, эта линия:

questionsLists.add(new QuestionsList(questionName, question_answers, question_iscorrect)); 

Должно быть вне как для петель, поскольку только там собираются данные ...

+0

ОК, сделайте это по-своему, но теперь в post execute я делаю это: 'answersArray = lists.get (position) .getAnswers(); for (int pos = position; pos

+0

Если мой первый ответ помог вам, вы можете его принять, во-вторых - вы снова повторяете эту ошибку. Вам не нужно использовать цикл for. – crazyPixel

+0

не могли бы вы привести пример кода? –

1

В сеттер, если у вас есть один сделать следующее:

void setAnswer (String sAnswer) 
{ 
String myAnswer = sAnswer.replace ("[", ""); 
} 
Смежные вопросы