我刚刚开始学习如何在 Android 中使用 JSON。我应该制作一个显示新闻标题、部分和作者的应用程序。
我不确定问题出在解析中还是其他原因,但它一直告诉我没有数据。
因此,如果它有问题,我可以在这部分获得一些帮助,以便我可以修复它或更多地查看问题所在。
JSON代码:
{
"response": {
"status": "ok",
"userTier": "developer",
"total": 191,
"startIndex": 1,
"pageSize": 10,
"currentPage": 1,
"pages": 20,
"orderBy": "relevance",
"results": [{
"id": "film/2017/may/25/12-jours-review-raymond-depardon-documentary-psychiatric-hospital-judge",
"type": "article",
"sectionId": "film",
"sectionName": "Film",
"webPublicationDate": "2017-05-25T15:37:15Z",
"webTitle": "12 Jours review – a devastating glimpse into broken souls",
"webUrl": "https://www.theguardian.com/film/2017/may/25/12-jours-review-raymond-depardon-documentary-psychiatric-hospital-judge",
"apiUrl": "https://content.guardianapis.com/film/2017/may/25/12-jours-review-raymond-depardon-documentary-psychiatric-hospital-judge",
"fields": {
"headline": "12 Jours review – a devastating glimpse into broken souls",
"starRating": "4",
"shortUrl": "https://gu.com/p/6g6hn",
"thumbnail": "https://media.guim.co.uk/1dbf594e183ebe5428fe88c82784c55908b4753c/0_0_3598_2160/500.jpg"
},
"tags": [{
"id": "profile/wendy-ide",
"type": "contributor",
"sectionId": "film",
"sectionName": "Film",
"webTitle": "Wendy Ide",
"webUrl": "https://www.theguardian.com/profile/wendy-ide",
"apiUrl": "https://content.guardianapis.com/profile/wendy-ide",
"references": [],
"firstName": "wendy",
"lastName": "ide"
}],
"isHosted": false,
"pillarId": "pillar/arts",
"pillarName": "Arts"
}]
}
}
我只需要title
,section
和author
. url
所以我这样写:
private static List<News> extractFeatureFromJson(String newsJSON) {
if (TextUtils.isEmpty(newsJSON)) {
return null;
}
List<News> news = new ArrayList<>();
try {
JSONObject baseJsonResponse = new JSONObject(newsJSON);
String response = baseJsonResponse.getString("response");
JSONObject object = new JSONObject(response);;
JSONArray newsArray=object.getJSONArray("results");
for (int i = 0; i < newsArray.length(); i++) {
JSONObject currentNews = newsArray.getJSONObject(i);
JSONObject results = currentNews.getJSONObject("results");
String title = results.getString("webTitle");
String section = results.getString("sectionName");
String author = results.getString("firstName");
String url = results.getString("webUrl");
News nNews = new News(title, section, author, url);
news.add(nNews);
}
} catch (JSONException e) {
Log.e("QueryUtils", "Problem parsing the news JSON results", e);
}
return news;
}
这对我来说是一个新概念,我很困惑,我真的很感激一些帮助。
编辑:
我在同一个应用程序中使用加载器,如果列表为空,它将显示一个没有数据的字符串,这就是它不断出现的内容。我不知道有什么问题。
public void onLoadFinished(Loader<List<News>> loader, List<News> news) {
View loadingIndicator = findViewById(R.id.loading_indicator);
loadingIndicator.setVisibility(View.GONE);
emptyTextView.setText(R.string.no_news);
newsAdapter.clear();
if (news != null && !news.isEmpty()) {
newsAdapter.addAll(news);
}
}