2016-12-27 3 views
2

я получит JSON реагировать, содержащее это:Добавить текст в зависимости от JSON ответа

{..."Weekday":[3,4,2],...} //numbers might not be in Ascending order 

Затем, в зависимости от того, что внутри «Weekday» Я напечатаю воскресенье на 0, в понедельник на 1 и так далее. Таким образом, текст, напечатанный выше, будет;

"Tuesday,Wednesday,Thursday" //This should be in ascending order 

Как я проверять и печатать то, что я хочу, как я делаю это так:

JSONObject obj = new JSONObject(result); //result from backend 
JSONObject DayOff = obj.getJSONObject("Weekday"); 

... 

tvWeekdays = (TextView) getActivity().findViewById(R.id.tvWeekdays); 
tvWeekdays.setText("The final result"); 

Я не уверен, что с тем, как достичь этого, я имею в виду, может быть, в то время как цикл или если заявление поможет?

--- UPDATE ---

  JSONArray array = obj.getJSONArray("Weekday"); 
     if (array == null){ 

      tvDayOff = (TextView) getActivity().findViewById(R.id.tvDayOff); 
      tvDayOff.setText("None"); 
     } 
     // Create an int array to accomodate the numbers. 
     int[] numbers = new int[array.length()]; 
     Arrays.sort(numbers); 
     // Extract numbers from JSON array. 
     for (int i = 0; i < array.length(); ++i) { 
      numbers[i] = array.optInt(i); 
      System.out.println(
        DateFormatSymbols.getInstance().getWeekdays()[numbers[i]] 
      ); 

     } 
+1

** 1 ** Отсортируйте массив INT с помощью 'Arrays.sort'. ** 2 ** итерация значений ** 3 ** Преобразование int в String с использованием 'DateFormatSymbols.getWeekdays'. Может быть, так? – AxelH

+0

Вы забыли поместить значения в свои 'int [] numbers' перед его сортировкой. Вам нужно зациклиться один раз на 'array', чтобы инициализировать' numbers', а затем отсортировать его. Затем вы можете получить значения String (поместите их туда, где хотите) – AxelH

ответ

1

Вот простой пример того, как получить значения в зависимости от местности:

public static void main(String[] args){ 
    for(int i = 0; i < 7; ++i) 
     System.out.println(
      DateFormatSymbols.getInstance().getWeekdays()[i+1] //First cell is empty... 
     ); 
} 

Это мой выход (на французском Locale) :

dimanche //Sunday 
lundi //Monday 
mardi 
mercredi 
jeudi 
vendredi 
samedi //Saterday 

Исходя из этого, вам просто нужно заказать массив целого, используя Arrays.sort(int[]) и получить строки.

Без использования JSON, это будет сделано так:

public static void main(String[] args){ 
    int[] array = {3, 5, 2}; //The array 
    Arrays.sort(array);  //Sort the array 
    for(int i = 0; i < array.length; ++i) //Loop on the result 
    System.out.println(
     DateFormatSymbols.getInstance().getWeekdays()[array[i]] 
    ); 
} 

Последний шаг должен был бы получить массив, для этого, я предлагаю вам прочитать this answer

EDIT:

Вы не можете сделать это в одном цикле. Сначала вам нужно получить значения, затем отсортировать массив. Как только это будет сделано, вы можете получить строку в правильном порядке

// Create an int array to accomodate the numbers. 
int[] numbers = new int[array.length()]; 
    // Extract numbers from JSON array. 
for (int i = 0; i < array.length(); ++i) { 
     numbers[i] = array.optInt(i); 
} 
Arrays.sort(numbers); 
for (int i = 0; i < numbers.length; ++i) { 
    System.out.println(
     DateFormatSymbols.getInstance().getWeekdays()[numbers[i]] 
    ); 
} 
+0

Спасибо за ваш ответ, он почти работает. Тем не менее, есть некоторые проблемы, я обновил свой ответ, но в будние дни были компенсированы 1. 1 для воскресенья, 2 для понедельника и так далее. Также я думаю, что мой массив не отсортирован правильно. – JerryKo

+0

@JerryKo см. Редактирование. Для смещения первый день - воскресенье, но с индексом 1. Возможно, вам понадобится использовать модуль, если вы хотите, чтобы неделя началась в понедельник. – AxelH

+1

Благодарим вас за ответ – JerryKo

1
JSONObject obj = new JSONObject(result); //result from backend 
    JSONArray DayOff = obj.getJSONArray("Weekday"); // I think weekday is an array 
// if weekday look like {"weekday":[2,4,3]}, its an array if so 
String[] dayText = new String[DayOff.length()]; 
for(int i=0, len=DayOff.length(); i<len; i++){ 
switch (DayOff(i)) { 
      case 0: dayText[i] = "Sunday"; 
        break; 
      case 1: dayText[i] = "Monday"; 
        break; 
      case 2: dayText[i] = "Tuesday"; 
        break; 
} 
} 

попробовать это ..

+0

Это как некоторая проблема, первый 'DayOff (i)' является псевдокодом, вам нужно использовать getter для получения значения. Во-вторых, вы должны заказать этот массив. И последний, переключатель не нужен, поскольку эти значения существуют – AxelH

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