从Google Books JSON填充Listview

时间:2018-06-13 13:25:13

标签: android json listview kotlin google-books

我正在使用 Google Books API 来搜索图书。但问题是,当我希望我的 ListView 填充书籍时,我会收到错误。这个错误指向 onPostExecute ,但我无法弄清楚问题是什么。

 override fun onPostExecute(books: List<Book>?) {
        if (books != null) {
            adapter!!.clear()
            for (book in books) {
                adapter!!.add(book)
            }
        }
    }

这是我设置适配器的地方:

  @Throws(JSONException::class)
    private fun getBookDataFromJson(booksJsonStr: String?): List<Book> {

        val books = ArrayList<Book>()

        val API_RESULT_ITEMS_ARRAY = "items"
        val API_VOLUME_INFO = "volumeInfo"
        val API_BOOK_TITLE = "title"
        val API_BOOK_IMAGE_LINKS = "imageLinks"
        val API_BOOK_SMALL_THUMBNAIL = "smallThumbnail"
        val API_BOOK_AUTHORS_ARRAY = "authors"

        val booksJson = JSONObject(booksJsonStr)
        val itemsArray = booksJson.getJSONArray(API_RESULT_ITEMS_ARRAY)

        for (i in 0 until itemsArray.length()) {

            val item = itemsArray.getJSONObject(i)
            val volumeInfo = item.getJSONObject(API_VOLUME_INFO)

            val bookTitle = volumeInfo.getString(API_BOOK_TITLE)

            val imageLinksSB = StringBuilder()
            if (!volumeInfo.isNull(API_BOOK_IMAGE_LINKS)) {
                val imageLinks = volumeInfo.getJSONObject(API_BOOK_IMAGE_LINKS)
                imageLinksSB.append(imageLinks.getString(API_BOOK_SMALL_THUMBNAIL))
            } else {
                imageLinksSB.append("-1")
            }
            val bookImageLink = imageLinksSB.toString()

            val authorsSB = StringBuilder()
            if (!volumeInfo.isNull(API_BOOK_AUTHORS_ARRAY)) {
                val authorsArray = volumeInfo.getJSONArray(API_BOOK_AUTHORS_ARRAY)
                for (k in 0 until authorsArray.length()) {
                    authorsSB.append(authorsArray.getString(k))
                    authorsSB.append(getString(R.string.comma))
                }
            } else {
                authorsSB.append(getString(R.string.unknown_error))
            }
            val bookAuthors = authorsSB.toString()

            books.add(Book(bookTitle, bookAuthors, bookImageLink))
        }

        Log.d(LOG_TAG, "BOOKS : $books")
        return books
    }

以下是我正在解析 JSON:

的所有代码
<Summary Year="2018" QtrNum="1" WeekNum="4" Date="1/22/2018" Code="101">

我找不到任何可以帮助我的东西,我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

您的问题是您声明适配器的地方,我遇到了这个问题,因为我的适配器声明位置错误。

您应该将适配器声明从 onCreatView 移动到 onViewCreated ,一切都会正常运行。

希望它有所帮助!