Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我的JSON提取方法只显示1个输出?_Android_Json_Api_Parsing_Networking - Fatal编程技术网

Android 为什么我的JSON提取方法只显示1个输出?

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

我一直在学习Android中的网络部分,并学习解析JSON响应。最近,我制作了一个Android应用程序,它使用Google Books API并以JSON的形式获取响应,对于一个特定的查询,一个示例查询是:

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");