【发布时间】:2018-09-13 03:09:58
【问题描述】:
我一直在尝试使用 URL 从在线 JSON 源中检索信息。我最初将信息解析为 Android 中的 TextView,但是我从 JSON 中获得了所有信息。下面是我所指的截图。
Text View Showing All Data In Json
基本上,我想要的只是显示位置,所以在上面的示例中,挪威奥斯陆在一个 Textview 中,然后在另一个显示该位置的当前月相,所以 - 再次使用上面的示例,打蜡新月。
这是我正在使用的 JSON。
{
"version": 2,
"locations": [{
"id": "187",
"geo": {
"name": "Oslo",
"country": {
"id": "no",
"name": "Norway"
},
"latitude": 59.913,
"longitude": 10.740
},
"astronomy": {
"objects": [{
"name": "moon",
"days": [{
"date": "2018-09-13",
"events": [],
"moonphase": "waxingcrescent"
}]
}]
}
}]
}
为了将 JSON 解析为显示所有数据的 Textview,我使用了以下内容。
JSONObject jo = new JSONObject(data);
JSONArray locations = jo.getJSONArray("locations");
for (int i = 0; i < locations.length(); ++i) {
JSONObject loc = locations.getJSONObject(0);
JSONObject geo = loc.getJSONObject("geo");
JSONObject country = geo.getJSONObject("country");
JSONObject astronomy = loc.getJSONObject("astronomy");
JSONObject objects = astronomy.getJSONArray("objects").getJSONObject(0);
JSONObject day = objects.getJSONArray("days").getJSONObject(0);
StringBuilder result = new StringBuilder();
String singleParsed = "Moon: "+ astronomy.getString("moonphase");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@RequiresApi(api = Build.VERSION_CODES.CUPCAKE)
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
MainActivity.fetcheddata.setText(this.data);
}
注意:在 For 循环中创建了一个字符串,称为“Single Parsed”,这就是我想要放在屏幕上的内容,但是 - 一旦我调用了该变量,屏幕上什么也没有显示。仅在使用时显示:
MainActivity.fetcheddata.setText(this.data);
但不是以下情况,我实际上收到一条错误消息“无法解析符号,singleParsed 也是如此。
MainActivity.fetcheddata.setText(this.singleParsed);
在对 Stack 进行了一些研究和之前的问题之后,我相信 GSON 是做我想做的事情的方法,但是我不知道从哪里开始,或者如何使用 GSON 完成任务。
感谢所有帮助。
【问题讨论】:
-
如果您先阅读 Gson 用户指南,然后尝试示例,这将有所帮助... 完成后,请随时 edit 提出您的问题
-
其次,
MainActivity.fetcheddata是错误的。永远不要让 View 成为静态变量。无论您使用什么网络库,都需要更新 UI 本身。