2016-12-15 4 views
0

Мой массив - это список событий, и мне нужно инициализировать каждое событие с помощью его информации из моего файла JSON. Я создал эту простую настройку на основе того, что я нашел в других ответах здесь, используя GSON, но я очень смущен тем, как работает вызов gson.fromJSON.Как правильно отформатировать этот вызов gson.fromJson?

У меня есть 3 переменные в событии, которое я хочу извлечь из файла JSON - дата начала, дата окончания и резюме. Из JSON автоматически присваивает их из JSON их значениям в Event?

это то, что мой файл JSON выглядит следующим образом:

[ 
    { 
    "dtstart": "10/31/2015", 
    "dtend": "10/31/2015", 
    "summary": "Halloween" 
    }, 
..... 
] 

Есть около полудюжины более из этих таких событий.

Это мой код в моем главном файле Java:

public class MainActivity extends AppCompatActivity { 


Event[] mobileArray; 
Gson gson = new Gson(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    BufferedReader br = null; 
    try { 
     br = new BufferedReader(new FileReader("academiccalendar.json")); 
    } catch (FileNotFoundException e){ 
     e.printStackTrace(); 
    } 

    mobileArray = gson.fromJson(br, Event[].class); 

И это мой класс событий:

public class Event { 
    private String dtsart; 
    private String dtend; 
    private String summary; 

Я знаю, что это должно заставить меня выглядеть полным дураком. Но я не могу оборачивать голову тем, как превратить этот JSON-файл в массив событий. Может ли кто-нибудь указать мне в правильном направлении? Я пробовал много других методов на StackOverflow и в других местах, но ничто не кажется правильным для моей ситуации.

EDIT: Удален цикл, который у меня был для mobileArray, с линией Gil. ВАЖНО для будущих людей, читающих это сообщение. FromGSON не инициализировал одни и те же переменные в моем классе Event, и я понял, что это было потому, что они были закрыты, и я пытался назначить их из моего основного класса активности. Я должен был перейти на публичный

ответ

3

Зачем вам нужен цикл?

ли вы попробовать эту строку кода:

mobileArray = gson.fromJson(br, Event[].class); 

попытаться получить весь массив сразу, вместо одного объекта одновременно.

Кроме того, какова ошибка, которую вы получаете при попытке сделать это?

И для вашего вопроса о fromJson ответ да, он автоматически назначает их, если имена переменных одинаковы в POJO и в файле JSON.

+0

Я не знал, что вы можете поставить целый массив в качестве второго аргумента. Моя IDE не дает мне ошибку, я просто не знаю, как работает звонок от JSON. Будет ли автоматически назначаться каждый объект объекта dtstart, dtend и итоговые переменные из моего файла JSON, просто называя эту строку кода? – Johnny

+1

Да, вы должны получать все объекты, выровненные по порядку в mobileArray. Добро пожаловать в силу Gson :) – Gil

+0

Это фантастика, это проще, чем я думал тогда. Будет ли эта строка вы вызывать также инициализировать мобильный массив? т.е. если в моем файле JSON есть 17 вещей, в mobileArray автоматически будет 17 событий? – Johnny

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