私が作成しているアプリでは、GoogleブックAPIから書籍を検索します。たとえば、このリンクを考えてみよう。https://www.googleapis.com/books/v1/volumes?q=phpJSONException:pageCountの値がありません
私が望むjsonオブジェクトをリストビューとして表示し、行がクリックされたときにブックの詳細データで新しいアクティビティを開始することができます。クラッシュすることなくすべてが画面に表示されても、次の例外が発生します。
08-04 09:30:07.897 29829-30069/com.example.android.booklist
W/System.err: org.json.JSONException: No value for pageCount
私は正に、なぜこれが起こっているのかわかりません。 pageCount intを取得するコード行をデバッグすると、問題なくページ数が読み込まれます。ここで私のJSsonのコードを解析します。
private static List<Book> extractFeatureFromJson(String bookJson){
if(TextUtils.isEmpty(bookJson)){
return null;
}
// Create an empty ArrayList that we can start adding earthquakes to
List<Book> books = new ArrayList<>();
String thumbnail=null;
try {
JSONObject baseJSON = new JSONObject(bookJson);
JSONArray itemsJsonArray = baseJSON.getJSONArray("items");
for(int i = 0;i<itemsJsonArray.length(); i++){
JSONObject item = itemsJsonArray.getJSONObject(i);
JSONObject volumeInfo = item.getJSONObject("volumeInfo");
String title = volumeInfo.getString("title");
JSONArray authorsArray = volumeInfo.getJSONArray("authors");
String authors = formatListOfAuthors(authorsArray);
String language = volumeInfo.getString("language");
String date = volumeInfo.getString("publishedDate");
// This line gives me the described exception.
int pageCount = volumeInfo.getInt("pageCount");
if(volumeInfo.has("imageLinks")){
JSONObject imageLinks = volumeInfo.getJSONObject("imageLinks");
thumbnail = imageLinks.getString("smallThumbnail");
}
Book b = new Book(title,authors,thumbnail,date,language,pageCount);
books.add(b);
}
} catch (JSONException e) {
e.printStackTrace();
}
return books;
}
実際のjsonレスポンスについては、質問の冒頭でリンクを確認できます。ありがとう、
Theo。
'pageCount'はオプションのプロパティです(10個の結果をリンクすると9個だけにpageCountがあります)。解析する前に、存在するかどうかチェックする必要があります。 – MatPag
@MatPag、リンクされたJSONに10個の 'pageCount'項目があります。おそらくそれはいくつかの条件によって変化します。 –
@MatPag、あなたが正しいテーマです。別のクエリでは、私は10のうち9つにpageCountを取得します。これは、例えばhttps://www.googleapis.com/books/v1/volumes?q=c++ –