2016-12-15 107 views
0

我的數組是一個事件列表,我需要用我的JSON文件中的信息初始化每個事件。我創建了這個簡單的設置基於我在這裏找到其他答案使用GSON,但我超級困惑如何gson.fromJSON調用工作如何正確格式化此gson.fromJson調用?

我有3個變量,我想從JSON文件檢索事件 - 開始日期,結束日期和摘要。 JSON是否自動將它們從JSON分配給它們在事件中的值?

這是我的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和其他地方的其他方法,但沒有一個似乎適合我的情況

編輯:刪除我已經爲移動陣列與吉爾張貼的循環。重要的是未來的人閱讀這條消息 - 從GSON沒有初始化我的事件類中相同的命名變量,我發現這是因爲他們被設置爲私人,我試圖從我的主要活動類中分配它們。我不得不改爲公開

回答

3

爲什麼你需要循環?

你嘗試這行代碼:一次,而不是一個對象

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

試圖讓整個數組一次。

另外,嘗試這樣做時會出現什麼錯誤?

對於你對fromJson的問題,答案是肯定的,如果POJO和JSON文件中的變量名稱相同,它會自動分配它們。

+0

我不知道你可以把整個數組作爲第二個參數。我的IDE沒有給我一個錯誤,我只是不確定fromJSON調用是如何工作的。每個Event對象的dtstart,dtend和summary變量是否會通過簡單地調用這行代碼從我的JSON文件自動分配? – Johnny

+1

是的,你應該通過mobileArray中的順序獲取所有對象。歡迎來到Gson的力量:) – Gil

+0

太棒了,比我想象的要容易得多。你所稱的這條線是否也初始化移動陣列?即如果我的JSON文件中有17件事情,那麼mobileArray中會自動生成17個事件? – Johnny