Android 为什么我的JSON提取方法只显示1个输出?
我一直在学习Android中的网络部分,并学习解析JSON响应。最近,我制作了一个Android应用程序,它使用Google Books API并以JSON的形式获取响应,对于一个特定的查询,一个示例查询是:Android 为什么我的JSON提取方法只显示1个输出?,android,json,api,parsing,networking,Android,Json,Api,Parsing,Networking,我一直在学习Android中的网络部分,并学习解析JSON响应。最近,我制作了一个Android应用程序,它使用Google Books API并以JSON的形式获取响应,对于一个特定的查询,一个示例查询是: https://www.googleapis.com/books/v1/volumes?q=android 此特定查询输出标题中包含Android的所有书籍 现在,当我写下面的代码时,它应该输出,标题,作者姓名,书的成本和每本书的页数,我要么是一个响应,要么没有响应 private st
https://www.googleapis.com/books/v1/volumes?q=android
此特定查询输出标题中包含Android的所有书籍
现在,当我写下面的代码时,它应该输出,标题,作者姓名,书的成本和每本书的页数,我要么是一个响应,要么没有响应
private static List<Book> extractFeatureFromJson(String jsonResponse) {
if(TextUtils.isEmpty(jsonResponse)){
return null;
}
List<Book> books = new ArrayList<>();
try {
JSONObject baseJSONResponse = new JSONObject(jsonResponse);
JSONArray bookArray =baseJSONResponse.getJSONArray("items");
for(int i=0;i<bookArray.length();i++){
JSONObject currentBook = bookArray.getJSONObject(i);
JSONObject volumeInfo = currentBook.getJSONObject("volumeInfo");
String bookName = volumeInfo.getString("title");
JSONArray authorsList = volumeInfo.getJSONArray("authors");
String authors = "";
for(int j=0; j<authorsList.length();j++){
authors += authorsList.getString(j) + ", ";
}
authors.substring(0,authors.length()-3);
JSONObject saleInfo = currentBook.getJSONObject("saleInfo");
JSONObject listPrice = saleInfo.getJSONObject("listPrice");
double cost = listPrice.getDouble("amount");
String currencyCode = listPrice.getString("currencyCode");
currencyCode = currencyCode +" "+ Integer.toString((int)cost);
int pageCount = volumeInfo.getInt("pageCount");
Book book = new Book(bookName, authors, currencyCode, Integer.toString(pageCount));
books.add(book);
}
} catch (JSONException e) {
Log.e("QueryUtils", "Problem parsing the book JSON results", e);
}
return books;
}
这是你的问题:
04-02 00:43:11.003 29601-29617/com.example.vanur.booklistapp E/QueryUtils: Problem parsing the book JSON results
org.json.JSONException: No value for listPrice
您正在查找一个不存在的属性listPrice
,因此JSONObject.getJSONObject()会根据文档抛出一个异常
如果您有一个字段,该字段有时会出现,但有时不使用opt
而不是get
:
saleInfo.getJSONObject("listPrice");
vs:
API:
然后,您只需检查
null的返回值,并执行所需的任何处理。添加完整的错误日志。在“解析书本时遇到问题…”字符串之后出现。还要添加一个您正在解析的JSON的代表性示例。@DataDino JSON响应是您在搜索URL时得到的,它非常长,所以我认为粘贴它会更混乱
saleInfo.getJSONObject("listPrice");
saleInfo.optJSONObject("listPrice");