2016-12-15 31 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