从 Google 本书 JSON 填充列表视图

Populate Listview from Google Books JSON

我正在使用 Google 图书 API 来搜索图书。但问题是,当我想让我的 ListView 填充书籍时,我得到一个 error。这个错误指向onPostExecute,但我想不出是什么问题。

 kotlin.KotlinNullPointerException
    at com.example.claudiu.reader.Fragments.ISBNFragment$FetchBookTask.onPostExecute(ISBNFragment.kt:137)
    at com.example.claudiu.reader.Fragments.ISBNFragment$FetchBookTask.onPostExecute(ISBNFragment.kt:56)

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

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

这是我解析 JSON:

的所有代码
  @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
    }

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

你的问题是你声明适配器的地方,我有这个问题是因为我的适配器声明在错误的地方。

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

希望对您有所帮助!